- 继承java.lang.Thread,并重写它的run()方法,将线程的执行主体放入其中。
- 实现java.lang.Runnable接口,实现它的run()方法,并将线程的执行主体放入其中。
这两种实现方式的区别并不大。继承Thread类的方式实现起来较为简单,但是继承它的类就不能再继承别的类了,因此也就不能继承别的类的有用的方法了。而使用是想Runnable接口的方式就不存在这个问题了,
而且这种实现方式将线程主体和线程对象本身分离开来,逻辑上也较为清晰,所以推荐大家更多地采用这种方式。
//实现Runnable接口的方式
class ImplementThread implements Runnable{
private String name;
public ImplementThread(String name){
this.name = name;
}
public void run(){
System.out.println("MyThread--->" + name);
}
}
public class TestCreateThread2 {
public static void main(String[] args){
ImplementThread t1 = new ImplementThread("Thread1");
ImplementThread t2 = new ImplementThread("Thread2");
new Thread(t1).start();
new Thread(t2).start();
}
}
//继承Thread类的方式
class ExtendThread extends Thread{
private String name;
public ExtendThread(String name){
this.name = name;
}
public void run(){
System.out.println("ExtendThread--->" +name);
}
}
public class TestCreateThread {
public static void main(String[] args){
ExtendThread t1 = new ExtendThread("thread 1");
ExtendThread t2 = new ExtendThread("thread 2");
t1.start();
t2.start();
}
}