我刚刚发现我可以创建一个新的线程用一个简单的我应该创建一个新的线程作为扩展线程的类还是只做一个新的线程对象实例?
Thread myThread = new Thread() {
public void run() {}
}
但大多数书籍建议我做一个类继承Thread,这似乎有点过分了我,当我可以只实例化Thread类直。在创建新类时声明新线程的方式有什么问题吗?
我刚刚发现我可以创建一个新的线程用一个简单的我应该创建一个新的线程作为扩展线程的类还是只做一个新的线程对象实例?
Thread myThread = new Thread() {
public void run() {}
}
但大多数书籍建议我做一个类继承Thread,这似乎有点过分了我,当我可以只实例化Thread类直。在创建新类时声明新线程的方式有什么问题吗?
我建议不要延长Thread
本身。相反,使用Thread
超载它接受一个Runnable
:
Thread thread = new Thread(new Runnable() {
@Override public void run() {
...
}
});
你没有真正改变Thread
行为 - 仅仅给它的一些代码运行。上面的代码比代入Thread
更清楚地表示了这一点。
您还应该考虑使用ExecutorService
而不是直接创建线程,请注意。这是创建Runnable
的另一个好处 - 您可以灵活地将它传递给Thread
构造函数或使用ExecutorService
...您可以抽象出Runnable
创建代码,然后使用任何您想要的方法。
我只是补充说,扩展线程将阻止你扩展任何其他类。因此,简单地创建一个新线程(创建一个匿名类)或者创建一个类Runnable – drewich 2014-09-03 21:33:55
@drewich:没有迹象表明OP *希望*在这里扩展任何其他类。在大多数情况下,我甚至不会让另一个类实现'Runnable' - 我通常在一个匿名类中实现它。 – 2014-09-03 21:35:02
你*已*做了一堂课,它只是匿名的。 – 2014-09-03 21:25:51
我的做法有什么问题吗? – 2014-09-03 21:26:41
除非您重写其他内容以及run(),否则扩展Thread不会有任何好处,因此通常不会完成。使用Runnable。 – EJP 2014-09-03 21:38:03