假设我在java中有几组线程,我想以这种方式实现:在每个时间点,只有一组线程可以运行,其他线程应该等待轮到他们(循环)。
你会如何建议这样做?
答案 0 :(得分:0)
您可以使用CyclicBarrier
来防止一组线程在另一组仍在进行时运行。您可以使用CountDownLatch
发布下一个组。
您要做的是在继续之前等待当前组之前重置循环屏障。在所有线程countdown the latch之后,屏障将被重置。
例如:
CyclicBarrier nextGroupContinue = new CyclicBarrier(1);
ExecutorService service = Executors.newCachedThreadPool();
final Runnable[][] groups = // init
try {
for (Runnable[] group : groups) {
int threads = group.length;
final CountDownLatch reset = new CountDownLatch(threads);
nextGroupContinue.await();
for (final Runnable runnable : group) {
service.execute(new Runnable() {
@Override
public void run() {
runnable.run();
reset.countDown();
}
});
}
reset.await();
nextGroupContinue.reset();
}
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
service.shutdownNow();