java - 不使用 Thread.join() 的原因

标签 java multithreading

最近,高级开发人员告诉我不要使用 Thread.join() 来等待另一个线程完成。我还在 SO 上看到了几个这样的问题,要求候补者加入。

在我的研究中,我没有发现 join() 有任何问题。事实上它被广泛使用。

所以我想知道为什么不用join()?它有什么问题?它会助长糟糕的编程或架构吗?

最佳答案

join() 没有任何问题。尽善尽美。

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

So I would like to know why not use join()?

那么这就是你的理由:因为你不在 Executor 世界中创建或操作线程,所以使用 join 没有意义。几乎每个 join 都可以替换为其他内容(Future.getCountDownLatchLocks 等)。


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

关于java - 不使用 Thread.join() 的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16513760/

相关文章:

java - Java 中的 LSH 库

java - 连接两个 Java 应用程序的适当方法

c - 服务器架构之谜,C编程

.net - 使用Asp.net 3.5的多线程与单线程

Java 忽略 boolean 评估

java - 如何修复 "No managed connections available within configured blocking timeout (60000 [ms]) "

java - 将事件处理添加到 Jframe 对话框

mysql - 如何找到Mysql线程

multithreading - 使用2个线程在串口上同时读写

java - Java HashMap 中的线程问题