为什么“实现Runnable”比“extends Thread”更受欢迎?

Java Thread本身实现了Java Runnable ! 并且根据Internet上的大多数专家, 实现Runnable比扩展Thread更受欢迎 ! 即使我们不能在Thread类的线程意义上使用Runnable !
那么为什么我们更喜欢在扩展Thread上实现Runnable ,因为在这两种情况下都通过调用Thread实现的方法(即start()run() )来声明实际线程,尽管在Thread情况下我们并没有真正“扩展”function通过仅覆盖run()方法的Thread

如果我听起来很混乱,我道歉……

最常见的区别是:

扩展Thread类时,不能扩展所需的任何其他类。 (如您所知,Java不允许inheritance多个类)。 实现Runnable时,可以为类保存一个空间,以便将来或现在扩展任何其他类。

但是,显着的区别是。

当您扩展Thread类时,每个线程都会创建唯一对象并与之关联。 实现Runnable时,它将同一对象共享给多个线程。

请查看: http : //manikandanmv.wordpress.com/tag/extends-thread-vs-implements-runnable/

如果你的类正在扩展Thread类,那么它就会变成一个inheritanceThread类属性的单个线程,所以它会很重。 (当扩展Thread类时,每个线程都会创建唯一对象并与之关联,但在实现Runnable时 ,它会将同一个对象共享给多个Threads)。

如果您的类是实现Runnable接口,那么您只覆盖run() 。因此,此实例创建一个单独的Thread并且每个单独的Thread单独运行,但不作为程序中的单个重线程运行。 另外,由于Java不支持多重inheritance ,如果实现Runnable,您将避免多次扩展的问题,因此如果您实现Runnable接口,您可以扩展除Thread类之外所需的任何类。

一个类可能只有一个超类,但可以实现任意数量的接口。 通过扩展Thread您可以放弃inheritance其他任何东西的机会。

Java只允许单inheritance,这意味着如果从Threadinheritance,您将无法从任何其他类inheritance。 实现Runnable接口没有此限制,因为允许您的类实现任意数量的接口。

你真的听起来很混乱。但是我知道因为我们可以使用Runnable实现相同的function,所以我们应该去实现它,因为如果我们将实现Runnable那么我们可以扩展其他类,如果我们将扩展Thread类是不可能的