为什么我应该使用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的队列,则除了实际运行之外,您不会使用尽可能多的内存。