加入和倒计时批处理有什么区别?
2022-09-01 04:58:54
当等待其他线程完成时,我们可以使用 或 。使用这两种机制的利弊是什么?join
CountdownLatch
当等待其他线程完成时,我们可以使用 或 。使用这两种机制的利弊是什么?join
CountdownLatch
只有在您自己处理线程时才可以使用。大多数人选择不直接处理线程处理的细节,而是使用执行器服务
为他们处理它。s 不会直接显示它们如何执行任务,因此您必须使用 :(假设您不希望只显示整个服务,也就是说。Thread.join
ExecutorService
CountDownLatch
shutdown
ExecutorService service = Executors.newFixedThreadPool(5);
final CountDownLatch latch = new CountDownLatch(5);
for(int x = 0; x < 5; x++) {
service.submit(new Runnable() {
public void run() {
// do something
latch.countDown();
}
});
}
latch.await();
另一个区别是,只有在连接的线程完成其执行时,线程才能解除阻止,而在线程中,线程可以在线程完成时随时减少计数,或者基于任何条件在两者之间减少计数。
通过这种方式,我们可以更好地控制线程的解锁,而不是仅仅依赖于连接线程的完成。join()
CountDownLatch