문제는 내가 스레드 A와 n 작업을해야한다는 것입니다. 스레드 A는이 작업이 완전히 끝날 때까지 기다려야합니다. 내 생각은 n 카운트로 CountDownLatch
을 사용하고 생산자/소비자 패턴을 사용하여 작업자를 제어합니다.정확하게 수행 된 작업을 기다리십시오. 생산자, 소비자 및 카운터
AtomicInteger
을 카운터로 사용합니다. 생산자가 카운터 값이 0보다 큰지 확인한 다음 BlockingQueue
에 신호를 입력하고 카운터 값이 0보다 작거나 같으면 생산자가 stopSignal을 열. 소비자는 대기열에서 신호가 stopSignal과 같지 않은지 확인한 다음 ExecutorService
을 사용하여 Worker
을 예약합니다. 작업이 다음 완료되면 예 다음 작업, 을 할 경우
작업자 호출 getAndDecrement
및 카운터의 값이 0보다 큰 경우 확인, 그것은 다른 CountDownLatch를 번호의 카운트 다운이 문제가 incrementAndGet
와 카운터를 증가 호출 작업이 완료되지 않은 경우 작업자가 카운터를 늘려야하지만 getAndDecrement
이후이므로 생산자가 카운터 값을 0으로보고 작업 합계가 n보다 작아도 중지 신호를 보냅니다!
정확하게 * n * 개의 스레드를 시작하고 모두'join() '할 수 없습니까? 어쩌면. – 9000
n은 커질 수 있기 때문에 나는 말할 수 없다. – robinmag