创建一个Java线程常见的有两种方式:
1.继承Thread类
两种表示方法:
(1).外部类
import java.util.Date;
public class Test1 {
public static void main(String[] args) {
//启动新线程 来完成输出时间的操作
Mytime mt=new Mytime();
//启动新线程 Thread的start()
mt.start();
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("主线程::"+i);
}
}
}
//外部类的解决方案
class Mytime extends Thread{
@Override
public void run() {
// 放入线程要执行的代码 这是一个非常耗时的操作
boolean flag=true;
while(flag){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Date d=new Date();
System.out.println(d);
}
}
}
(2).匿名内部类
import java.util.Date;
public class Test2 {
/**
* @param args
*/
public static void main(String[] args) {
//匿名内部类的解决方案
Thread t=new Thread(){
@Override
public void run() {
boolean flag=true;
while(flag){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Date d=new Date();
System.out.println(d);
}
}
};
t.start();
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("主线程::"+i);
}
}
}
------------------------------------------------------
import java.util.Date;
public class Test3 {
/**
* @param args
*/
public static void main(String[] args) {
//匿名内部类 方案 因为这时 子类名是没有的 直接对Thread的run方法进行了实现
new Thread(){
@Override
public void run() {
boolean flag=true;
while(flag){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Date d=new Date();
System.out.println(d);
}
}
}.start();
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("主线程::"+i);
}
}
}
2.实现Runnable接口
两种表示方法
(1).外部类
import java.util.Date;
public class Test4 {
/**
* @param args
*/
public static void main(String[] args) {
Mytime2 mt=new Mytime2();
// 创建线程用Thread类 并指定这个线程要执行的任务是mt
Thread t=new Thread(mt);
t.start();
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("主线程::"+i);
}
}
}
//外部类 这表示一个线程可以执行的任务
class Mytime2 implements Runnable{
@Override
public void run() {
boolean flag=true;
while(flag){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Date d=new Date();
System.out.println(d);
}
}
}
(2).匿名内部类
import java.util.Date;
public class Test5 {
/**
* @param args
*/
public static void main(String[] args) {
// 创建一个任务对象 匿名内部类 有对象的引用
Runnable r=new Runnable(){
@Override
public void run() {
boolean flag=true;
while(flag){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Date d=new Date();
System.out.println(d);
}
}
};
Thread t=new Thread(r);
t.start();
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("主线程::"+i);
}
}
}
----------------------------------------------------------------------------
import java.util.Date;
public class Test6 {
/**
* @param args
*/
public static void main(String[] args) {
// 创建一个任务对象 匿名内部类
new Thread(new Runnable(){
@Override
public void run() {
boolean flag=true;
while(flag){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Date d=new Date();
System.out.println(d);
}
}
}).start();
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("主线程::"+i);
}
}
}