第一种方式 继承Thread
public class ThreadTest extends Thread {
private String name; //定义一个属性
public ThreadTest(String name){//构造方法
this.name=name;
}
public void run(){//重写run()方法
System.out.println(this.name +"_______"+ new Date());
}
}
public class ThreadTest3 {
public static void main(String[] args) {
ThreadTest mt1=new ThreadTest("线程1");
ThreadTest mt2=new ThreadTest("线程2");
ThreadTest mt3=new ThreadTest("线程3");
//启动
mt1.start();
mt3.start();
mt2.start();
}
}
第二种实现方式实现Runnable接口
public class ThreadTest2 implements Runnable {
private String name;
public ThreadTest2(String name){
this.name=name;
}
@Override
public void run() {
System.out.println(this.name+"________"+new Date());
}
}
public class ThreadTest4 {
public static void main(String[] args) {
ThreadTest2 mt=new ThreadTest2("A");
ThreadTest2 mt1=new ThreadTest2("B");
ThreadTest2 mt2=new ThreadTest2("C");
Thread thread = new Thread(mt);
Thread thread2 = new Thread(mt1);
Thread thread3 = new Thread(mt2);
thread.start();
thread2.start();
thread3.start();
}
}
第三种方式 实现Callable(有返回值)
public class CallableTest implements Callable<String> {
private String name;
public CallableTest(String name) {
this.name=name;
}
@Override
public String call() throws Exception {
return "你好"+"----------"+this.name;
}
}
public class CallableMain {
public static void main(String[] args) {
CallableTest mt1=new CallableTest("A");
CallableTest mt2=new CallableTest("B");
CallableTest mt3=new CallableTest("C");
FutureTask<String> futureTask = new FutureTask<String>(mt1);
FutureTask<String> futureTask2 = new FutureTask<String>(mt2);
FutureTask<String> futureTask3 = new FutureTask<String>(mt3);
new Thread(futureTask).start();
new Thread(futureTask2).start();
new Thread(futureTask3).start();
try {
System.out.println(futureTask.get());
System.out.println(futureTask2.get());
System.out.println(futureTask3.get());
} catch (Exception e) {
}
}
}