简书 賈小強
转载请注明原创出处,谢谢!
在Java语言中,我们都知道,有两种创建线程的方式,一中是使用Runnable
接口,另一种是使用Thread
类。
public class DemoRunnable implements Runnable {
public void run() {
//Code
}
}
//with a "new Thread(demoRunnable).start()" call
public class DemoThread extends Thread {
public DemoThread() {
super("DemoThread");
}
public void run() {
//Code
}
}
//with a "demoThread.start()" call
已经有大量的辩论,哪一个更好。嗯,我也试着找出答案,下面是我的研究:
- 实现
Runnable
接口是首选方法。在这里,您并不需要修改Thread
类的行为。你只是给线程一些东西运行。这意味着组合是最好的方式。 - Java只支持单一继承,所以你只能继承一个类。
- 用接口的方式将你的代码和线程实现分离,更加清晰。
- 实现
Runnable
使你的类更灵活。如果您继承Thread
类,那么您所做的操作总是处于一个线程中。然而如果你采用实现Runnable
接口,您可以在一个线程中运行它,或者将它传递给某种执行器(executor),或者只是将它作为一个单线程应用程序中的任务传递给它。 - 通过继承
Thread
类,每个线程都有一个相关联的唯一对象,而实现Runnable
接口,多线程可以共享同一个Runnable
实例。 - 如果你工作在JDK 4或更低,那么有一个bug
它在Java 1.5中被修复,但Sun公司不打算修复1.4中的bug。
Happy Learning !!