不使用 Thread.join() 的原因

2022-09-02 11:40:48

最近,高级开发人员告诉我不要使用Thread.join()等待另一个线程完成。我也看到过几个这样的问题,要求替代者加入。

在我的研究中,我找不到 join() 有什么问题。事实上,它被广泛使用。

所以我想知道为什么不使用join()?这是怎么回事?它是否促进了糟糕的编程或架构?


答案 1

没有错。它和它一样好。join()

但是,这就是为什么您不应该将应用程序构建为依赖于联接的原因。在Java中,运行任务的主要抽象不再是Thread。是的。也就是说,您将并发任务包装为并简单地将其提交给,而不必担心执行细节。这就是工作原理。您或一个或分别和无需指定线程。ExecutorCallableExecutorExecutorsubmitexecuteCallableRunnable

所以我想知道为什么不使用join()?

然后,这是你的理由:由于您不在执行器世界中创建或操作线程,因此使用.几乎每个都可以用其他东西(,,,等)代替。joinjoinFuture.getCountDownLatchLocks


注意:我并不是说在使用执行器时不需要操作线程。在某些情况下,最好创建自己的 Thread 子类,然后让 Executor 通过 使用它们。ThreadFactory


答案 2

一般来说,使用Thread.join没有错,但是您需要非常小心并知道线程的来源。如果它来自线程池 - 那么您确实会遇到麻烦,因为这样的线程一直在运行,直到池终止并在几个工作线程之间共享。