Java 为什么;实现“可运行”;优先于;扩展线程“;?

Java 为什么;实现“可运行”;优先于;扩展线程“;?,java,multithreading,runnable,Java,Multithreading,Runnable,Java本身实现了一个JavaRunnable!根据大多数专家在互联网上的说法!即使在线程的意义上没有线程类 那么为什么我们更喜欢实现Runnable而不是扩展Thread,因为在这两种情况下,实际线程都是通过调用Thread实现方法(即start()或run())来表示的,尽管在Thread的情况下,我们并不是真正的“扩展”仅通过重写run()方法来实现Thread的功能 如果我听起来很困惑,我向你道歉 一个类只能有一个超类,但可以实现任意数量的接口。通过扩展线程您放弃了对任何其他内容进行子类

Java本身实现了一个Java
Runnable
!根据大多数专家在互联网上的说法!即使在线程的意义上没有线程类
那么为什么我们更喜欢实现
Runnable
而不是扩展
Thread
,因为在这两种情况下,实际线程都是通过调用
Thread
实现方法(即
start()
run()
)来表示的,尽管在
Thread
的情况下,我们并不是真正的“扩展”仅通过重写
run()
方法来实现
Thread
的功能


如果我听起来很困惑,我向你道歉

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

最常见的区别是:

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

然而,显著的差异是

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

选中此项:

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

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

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

听起来您真的很困惑。无论如何,我知道的一个原因是,我们可以使用Runnable实现相同的功能,所以我们应该这样做,因为如果我们要实现Runnable,那么我们可以扩展其他类,这是不可能的,如果我们要扩展Thread类

意味着,针对应用程序,在未来或现在,我们不需要继承已经继承的类(从Thread继承)而且应用程序似乎没有面临内存问题,那么Runnable和Thread,两者都应该有平等的机会….?OOP的基本原则是,“始终通过实现对接口进行编程”链接中的解释是肯定的,感谢您在此处发布。链接中提供的示例澄清了线程扩展和可运行之间的差异概念。谢谢线程很难控制。调查遗嘱执行人,寻找更好的方法。它们接受可调用和可运行,而不是线程,。。。runnable和new Thread()语句的执行是否真的相同?(如果同时拨打多个电话,费用会很高)?