0
내가 이런 방식으로 구현하고자하는 자바 스레드 그룹이 몇 개 있다고 가정 해 보겠습니다. 각 시점에서 스레드 그룹 하나만 실행할 수 있고 나머지는 차례를 기다려야합니다 (사이 클릭).스레드 그룹 실행
추천하는 방법은 무엇입니까?
내가 이런 방식으로 구현하고자하는 자바 스레드 그룹이 몇 개 있다고 가정 해 보겠습니다. 각 시점에서 스레드 그룹 하나만 실행할 수 있고 나머지는 차례를 기다려야합니다 (사이 클릭).스레드 그룹 실행
추천하는 방법은 무엇입니까?
CyclicBarrier
을 사용하면 다른 그룹이 계속 진행되는 동안 한 스레드 그룹이 실행되지 않도록 할 수 있습니다. 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();