最近,高级开发人员告诉我不要使用Thread.join()等待另一个Thread完成.我也看过几个关于SO的问题,要求候补人员加入.
在我的研究中,我找不到join()的任何错误.实际上它被广泛使用.
所以我想知道为什么不使用join()?这有什么问题?它会促进糟糕的编程或架构吗?
gob*_*ice 33
这没什么不对join().它一样好.
但是,这就是为什么你不应该构建你的应用程序来依赖连接.在Java中,运行任务的主要抽象不再是Thread.是的Executor.那就是你将并发任务包装起来Callable并简单地将其提交给一个Executor而不用担心执行细节.这是怎么回事Executor.你submit还是execute一个Callable或Runnable分别不需要指定线程.
所以我想知道为什么不使用join()?
那么这就是你的理由:既然你没有在Executor世界中创建或操纵线程,那么使用就没有意义了join.几乎每一个join可以用别的东西(被替换Future.get,CountDownLatch,Locks,等).
注意:我并不是说在使用Executors时你不需要操作Threads.在某些情况下,最好创建自己的Thread子类,然后让Executor通过它们来使用它们ThreadFactory.
jde*_*lop 11
一般来说使用Thread.join并没有什么问题,但是你需要非常小心并知道线程的来源.如果它来自一个线程池 - 那么你确实遇到了麻烦,因为这样的线程一直在运行,直到池被终止并在几个worker之间共享.
IMO 加入没有任何问题。您只需要注意确保您正在等待的线程在所有情况下都会终止。因为如果不这样做,那么执行可能会永远停止。因此,如果您使用 join 让主线程等待某个线程,并且该线程没有终止,则可能会导致整个应用程序冻结。