为什么我应该使用Runnable而不是Thread?
我只是学习关于线程的理论。 还有Thread和Runnable。
class A extends Thread{ public void run(){ while(true) { System.out.println("Hi"); } } }
class B implements Runnable{ public void run(){ System.out.println("Hi"); } }
线程很好用丰富的API,为什么我会使用Runnable而不是Thread?
谢谢。
1. Java不支持多重inheritance,这意味着你只能扩展一个Java类,所以一旦扩展了Thread
类,你就失去了机会,无法在java中扩展(inheritance)另一个类。
2.在OOP中,扩展类通常意味着添加新function,修改或改进行为。 如果您没有对Thread
进行任何修改,请改用Runnable
接口。
3.实现Runnable
使您的类更灵活(您可以实现多个接口)。
其中一个重要优点是:您不必在新线程上运行Runnable
。
有一天,您可能决定不是在新线程上运行它,而是直接运行它(在当前线程上)或线程池 – 然后您可以将new Thread(runnable).start()
更改为threadPool.submit(runnable)
或runnable.run()
– 并且更改仅影响一个地方。
此外,如果你留下一个Runnable
,它不会浪费资源 – 它不计入线程限制(如果有),并且它不会为堆栈预留空间。 假设您希望一次有一个事物队列 – 确定,您可以拥有一个Queue
,然后在前一个线程完成时启动每个线程,但是然后您将浪费大量内存与非运行线程。 如果您使用了Runnable
的队列,则除了实际运行之外,您不会使用尽可能多的内存。