Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 何时通过扩展创建线程_Java_Multithreading_Concurrency - Fatal编程技术网

Java 何时通过扩展创建线程

Java 何时通过扩展创建线程,java,multithreading,concurrency,Java,Multithreading,Concurrency,通常,线程可以通过两种方式创建 扩展线程类 实现可运行接口 通过阅读所有教程,all说实现可运行接口总是好的,因为如果您使用extending1st方法创建,则无法扩展任何其他类。 如果我们通过扩展来创建线程,那么每个线程都将创建新对象,而如果我们通过实现来创建线程,那么所有线程都将共享同一个对象 我的问题是,如果实现Runnable是最好的选择,而扩展线程是不好的做法,为什么java会有这个选择?我相信如果我们通过扩展创建线程肯定会有一些好处,我相信我们应该使用扩展线程方法,当没有其他父类不是

通常,线程可以通过两种方式创建

扩展线程类 实现可运行接口 通过阅读所有教程,all说实现可运行接口总是好的,因为如果您使用extending1st方法创建,则无法扩展任何其他类。 如果我们通过扩展来创建线程,那么每个线程都将创建新对象,而如果我们通过实现来创建线程,那么所有线程都将共享同一个对象

我的问题是,如果实现Runnable是最好的选择,而扩展线程是不好的做法,为什么java会有这个选择?我相信如果我们通过扩展创建线程肯定会有一些好处,我相信我们应该使用扩展线程方法,当没有其他父类不是唯一的答案时


提前感谢

这是一个设计决策,何时应该实现可运行接口,何时应该扩展线程

问自己一些问题-如果你想要一个更具体的对象或对象的特殊版本。如果它向现有的Thread对象添加了新功能,那么您应该扩展threda类。否则就去实现一个可运行的接口。 实现Runnable不会创建线程。实现可运行接口只会创建一个应该由线程执行的任务。 实现任务的另一个好处是任务是可重用的,而使用线程扩展创建的对象是不可重用的。
2018年,真正的答案是:你根本不用裸金属线

现在我们有了抽象概念,比如框架

避免自己做线程


如果你这样做,你会认为好的老恩惠组合胜过继承。在本例中,这可以归结为:不扩展线程,而是实现Runnable。您不想通过使用extends来限制您的类,而可以使用实现

要更正,可以通过3种方式创建线程 3.使用可调用接口

java不允许类扩展多个类来防止C/C++中存在的菱形问题。若您确信您的类不会扩展任何其他类,但可以从Thread类扩展Thread,或者建议扩展Runnable或Callable接口

我相信如果我们通过扩展来创建线程,肯定会有一些优势


如果您想为一个方法提供自定义实现,那么您可以获得扩展类的所有好处。

我认为您是对的,但是,这更多的是一个注释,而不是一个答案,因为它不会试图回答OP的问题。@Erwinbolwid不确定,我明白您的意思。另一方面,更多的人理解:以后不要使用线程越好。答案有更好的机会找到读者。除此之外,我进一步增强了我的回答,使其更有帮助。线程在内部实现可运行,因此很明显,实现接口将比使用紧耦合架构扩展类更灵活,更容易在需要时进行修改。有关更多信息,请查看线程实现,我注意到你的问题仍然悬而未决——因为你没有接受答案。请看一看,然后决定是否要回答。或者让我知道是否有什么我可以做的,以加强我的投入,使其值得接受。接受帮助未来的读者确定问题是否得到解决,并对花时间回答你的人表示感谢。谢谢