A J*_*son 35 java multithreading synchronization
在程序执行过程中,会启动许多线程.线程数量取决于用户定义的设置,但它们都使用不同的变量执行相同的方法.
在某些情况下,执行中需要清理,其中一部分是停止所有线程,我不希望它们立即停止,我只是设置一个他们检查的变量来终止它们.问题是它可以在线程停止前最多1/2秒.但是,我需要确保在清理可以继续之前所有线程都已停止.清理是从另一个线程执行的,所以从技术上讲,我需要这个线程来等待其他线程完成.
我想到了几种方法,但它们似乎都过于复杂.我希望有一些方法可以等待一组线程完成.有这样的事吗?
谢谢.
Jon*_*eet 59
只需逐个加入:
for (Thread thread : threads) {
thread.join();
}
Run Code Online (Sandbox Code Playgroud)
(你需要做一些事情InterruptedException
,你可能希望在出现问题时提供暂停时间,但这是基本想法...)
Tad*_*pec 14
如果您使用的是Java 1.5或更高版本,则可以尝试使用CyclicBarrier.您可以将清理操作作为其构造函数参数传递,并barrier.await()
在需要清理时调用所有线程.
自己定义一种实用方法(或多种方法):
public static waitFor(Collection<? extends Thread) c) throws InterruptedException {
for(Thread t : c) t.join();
}
Run Code Online (Sandbox Code Playgroud)
或者你可能有一个阵列
public static waitFor(Thread[] ts) throws InterruptedException {
waitFor(Arrays.asList(ts));
}
Run Code Online (Sandbox Code Playgroud)
另外,您可以看看使用CyclicBarrier
的java.util.concurrent
库来实现任意交会多个线程之间的点.
归档时间: |
|
查看次数: |
57399 次 |
最近记录: |