关于java:为什么“implements Runnable”优先于“extends Thread”?

Why “implements Runnable” is Preferred over “extends Thread”?

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

Java线程本身实现了一个Java EDCOX1 0!而且根据大多数互联网专家的说法,实现可运行性优于扩展线程!即使我们不能在thread类之外使用unnable!那么,为什么我们更倾向于实现Runnable而不是扩展Thread,因为在这两种情况下,实际线程都是通过调用Thread实现的方法(即start()run())来表示的,尽管在Thread的情况下,我们并不是通过仅仅覆盖run()me来真正"扩展"Thread的功能。托德?

如果我听上去很困惑,我会道歉的。


最常见的区别是:

当您扩展线程类时,不能扩展您需要的任何其他类。(如您所知,Java不允许继承多个类)。实现可运行时,可以为类节省空间,以便将来或现在扩展任何其他类。

然而,显著的差异是。

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

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


如果您的类正在扩展线程类,那么它将成为继承属性线程类的单个线程,因此它将很重。(当扩展线程类时,每个线程创建唯一的对象并与其关联,但在实现可运行时,它将同一对象共享给多个线程)。

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


一个类只能有一个超类,但可以实现任意数量的接口。通过扩展Thread,您就放弃了对任何其他子类进行划分的机会。


Java只允许单继承,这意味着,如果您从EDCOX1(0)继承,就无法继承任何其他类。实现Runnable接口没有这个限制,因为类可以实现任意数量的接口。


你听起来很困惑。不管怎样,我知道有一个原因,因为我们可以使用runnable实现相同的功能,所以我们应该继续,因为如果我们要实现runnable,那么我们可以扩展其他类,如果我们要扩展thread类,这是不可能的。