何时通过扩展创建线程

Gue*_*est 0 java concurrency multithreading

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

  1. 扩展线程类
  2. 实现 Runnable 接口

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

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

提前致谢

Gho*_*ica 5

在 2018 年,真正的答案是:您根本不使用裸机线程。

这些天我们有像fork/joinfuturesExecutorService框架这样的抽象。

避免自己做线程!

如果你这样做,你会考虑“古老的” Favor Composition 而不是继承。其中,在这种情况下归结为:不要扩展线程,而是实现 Runnable。你希望限制使用类extends,当你可以逃脱implements,而不是!