关于java:为什么我应该使用Runnable而不是Thread?

Why should I use Runnable instead of Thread?

本问题已经有最佳答案,请猛点这里访问。

我只是学习了关于线的理论。还有线程和可运行的。

1
2
3
4
5
6
7
class A extends Thread{
    public void run(){
            while(true) {
                System.out.println("Hi");
            }          
        }
    }
1
2
3
4
5
class B implements Runnable{
    public void run(){
        System.out.println("Hi");
    }
}

线程对于富API很好,所以为什么我要使用runnable而不是线程?

谢谢。


1。Java不支持多重继承,这意味着只能扩展一个Java类,因此一旦扩展了EDCOX1,0类,就失去了机会,不能在Java中扩展(继承)另一个类。

2。在OOP中,扩展类通常意味着添加新功能、修改或改进行为。如果您没有对Thread进行任何修改,那么使用Runnable接口。

三。实现Runnable使类更加灵活(您可以实现多个接口)。


其中一个最大的优点是:您不必在新线程上运行Runnable

有一天,您可能会决定不在新线程上运行它,而是直接(在当前线程上)运行它,或者在线程池上运行它,然后您可以将new Thread(runnable).start()更改为threadPool.submit(runnable)runnable.run(),并且更改只影响一个地方。

另外,如果您让一个Runnable挂在旁边,它不会浪费资源——它不计入线程限制(如果有线程限制),也不会为堆栈保留空间。假设你想一次做一件事——当然,你可以有一个Queue,然后在前一个线程完成时启动每个线程,但是在没有运行的线程上浪费了大量的内存。如果您使用的是Runnable的队列,那么除了它们实际运行时,您不会使用太多的内存。