为什么我应该使用Runnable而不是Thread?
这个问题在这里已经有了答案:
1. Java不支持多继承,这意味着你只能扩展一个Java类,所以一旦你扩展了Thread
类,你就失去了机会,不能扩展(继承)java中的另一个类。
2.在OOP中,扩展类通常意味着增加新的功能,修改或改进行为。 如果您没有对Thread
进行任何修改,请改为使用Runnable
接口。
3.实现Runnable
使你的类更加灵活(你可以实现多个接口)。
其中一个重大优势是:您不必在新线程上运行Runnable
。
有一天,您可能会决定不是在新线程上运行它,而应该直接(在当前线程上)或线程池上运行它 - 然后可以将new Thread(runnable).start()
更改为threadPool.submit(runnable)
或runnable.run()
- 并且更改仅影响一个地方。
另外,如果你让一个Runnable
挂起,它不会浪费资源 - 它不会占用线程限制(如果有的话),也不会为堆栈预留空间。 假设你想要有一个队列可以一次完成一个 - 当然,你可以有一个Queue<Thread>
,然后在前一个线程完成时启动每个线程,但是这样会浪费大量内存,运行线程。 如果您使用Runnable
队列,除非实际运行时,则不会使用更多内存。