假设我在 java 中有几组线程,我想以这种方式实现:在每个时间点,只有一组线程可以运行,其他线程应该等待轮到它们(循环)。
你会如何建议这样做?
假设我在 java 中有几组线程,我想以这种方式实现:在每个时间点,只有一组线程可以运行,其他线程应该等待轮到它们(循环)。
你会如何建议这样做?
您可以使用 aCyclicBarrier
来防止一组线程在另一组仍在进行时运行。您可以使用CountDownLatch
.
您要做的是在电流之前等待该组重置循环障碍,然后再继续。在所有线程倒计时锁存器后,屏障将被重置。
例如:
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();