首页 > 解决方案 > 何时通过扩展创建线程

问题描述

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

  1. 扩展线程类
  2. 实现一个可运行接口

通过阅读所有教程,所有人都说实现一个 Runnable 接口总是好的,因为如果你通过扩展(第一种方法)创建你不能扩展任何其他类,我同意。而且,如果我们通过扩展创建线程,那么每个线程都将创建新对象,而如果我们通过实现所有线程来创建线程,则所有线程将共享同一个对象。

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

提前致谢

标签: javamultithreadingconcurrency

解决方案


2018 年,真正的答案是:你根本不使用裸金属线程。

如今,我们有诸如fork/joinfuturesExecutorService框架之类的抽象。

避免自己做线程!

如果你这样做,你会考虑“好旧的” Favor Composition 而不是继承。在这种情况下,归结为:不要扩展线程,而是实现 Runnable。您不想通过使用 , 来限制您的课程extends,而您可以逃脱implements


推荐阅读