2012-09-06 4 views
0

Runnable 인터페이스를 구현하는 클래스가 있습니다. 각각은 별도의 SingleThreadExecutor를 통해 실행됩니다. 나는 실행 루틴을 수정할 수 없다. 단지 다른 Runnable을 제공 할 수있다.정적 래치 또는 세마포어를 사용해도 되나요?

다른 Runnables 결과에 따라 Runnables로 일부 작업을 수행해야합니다. 나는. 다른 모든 Runnable이 해당 실행 지점에 도달 한 경우에만 run() 메서드 내에서 일부 작업을 실행하려고합니다. 또는 동일한 작업을 수행하는 Runnables의 수가 10 개 미만인 경우에만 run() 메서드 내에서 루틴을 실행하고 싶습니다.

유일한 해결책은 정적 변수 CountDownLatch 및 Semaphore를 다음과 같이 만드는 것입니다. 에 동기화하십시오.

이 기능을 구현했지만 일부 알 수없는 이유로 시작하는 Runnable SingleThreadExecutor는 일부 Runnable이 래치 또는 세마포를 기다리고있는 경우 다음 Runnable과 함께 스레드를 시작하지 않습니다. 예를 들어 7 Runnables start, 다른 Runnables는 시작하지 않습니다.

내 질문 : 올바른 래치 또는 세마포어 동기화에 대한 나의 계획은 무엇입니까?

+0

당신이하는 일은 일할 수 있습니다 - 왜 어떤 코드를 보지 않고서는 말하기 어렵습니다. – assylias

답변

0

CyclicBarrier 일반적 CountDownLatch 경우보다 유용

  1. 멀티 스레드 동작을 반복 또는 단계, 및 발생;
  2. 예를 들어 스테이지/반복간에 단일 스레드 작업 인 을 사용하면 이전 멀티 스레드 된 부분의 결과를 결합 할 수 있습니다.

자세한 정보 Here. 예 Here