最近,高级开发人员告诉我不要使用 Thread.join() 来等待另一个线程完成。我还在 SO 上看到了几个这样的问题,要求候补者加入。
在我的研究中,我没有发现 join() 有任何问题。事实上它被广泛使用。
所以我想知道为什么不用join()?它有什么问题?它会助长糟糕的编程或架构吗?
最佳答案
join()
没有任何问题。尽善尽美。
但是,这就是为什么您不应该将您的应用程序架构为依赖于联接。在 Java 中,运行任务的主要抽象不再是线程。它是执行器
。也就是说,您将并发任务包装为 Callable
并简单地将其提交给 Executor
而无需担心执行细节。这就是 Executor
的工作方式。您分别提交
或执行
一个Callable
或Runnable
,无需指定Thread。
So I would like to know why not use join()?
那么这就是你的理由:因为你不在 Executor 世界中创建或操作线程,所以使用 join
没有意义。几乎每个 join
都可以替换为其他内容(Future.get
、CountDownLatch
、Locks
等)。
注意:我并不是说您在使用执行器时不需要操作线程。在某些情况下,最好创建自己的 Thread 子类,然后让 Executor 通过 ThreadFactory
使用它们。
关于java - 不使用 Thread.join() 的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16513760/