不使用 Thread.join() 的原因
2022-09-02 11:40:48
最近,高级开发人员告诉我不要使用Thread.join()等待另一个线程完成。我也看到过几个这样的问题,要求替代者加入。
在我的研究中,我找不到 join() 有什么问题。事实上,它被广泛使用。
所以我想知道为什么不使用join()?这是怎么回事?它是否促进了糟糕的编程或架构?
最近,高级开发人员告诉我不要使用Thread.join()等待另一个线程完成。我也看到过几个这样的问题,要求替代者加入。
在我的研究中,我找不到 join() 有什么问题。事实上,它被广泛使用。
所以我想知道为什么不使用join()?这是怎么回事?它是否促进了糟糕的编程或架构?
没有错。它和它一样好。join()
但是,这就是为什么您不应该将应用程序构建为依赖于联接的原因。在Java中,运行任务的主要抽象不再是Thread。是的。也就是说,您将并发任务包装为并简单地将其提交给,而不必担心执行细节。这就是工作原理。您或一个或分别和无需指定线程。Executor
Callable
Executor
Executor
submit
execute
Callable
Runnable
所以我想知道为什么不使用join()?
然后,这是你的理由:由于您不在执行器世界中创建或操作线程,因此使用.几乎每个都可以用其他东西(,,,等)代替。join
join
Future.get
CountDownLatch
Locks
注意:我并不是说在使用执行器时不需要操作线程。在某些情况下,最好创建自己的 Thread 子类,然后让 Executor 通过 使用它们。ThreadFactory
一般来说,使用Thread.join没有错,但是您需要非常小心并知道线程的来源。如果它来自线程池 - 那么您确实会遇到麻烦,因为这样的线程一直在运行,直到池终止并在几个工作线程之间共享。