0

假设我在 java 中有几组线程,我想以这种方式实现:在每个时间点,只有一组线程可以运行,其他线程应该等待轮到它们(循环)。

你会如何建议这样做?

4

1 回答 1

0

您可以使用 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();
于 2014-12-23T02:55:12.457 回答