다음 코드가 있다고 상상해보십시오.
final ExecutorService threadPool = Executors.newFixedThreadPool(
NUMBER_OF_WORKERS);
for (int i=0; i < NUMBER_OF_WORKERS; i++)
{
final Worker worker = new BirthWorker(...);
threadPool.execute(worker);
}
이제 모든 작업자가 작업을 완료 할 때까지 기다리는 코드가 필요합니다.
내가 알고있는 옵션 :
while (!threadPool.isTerminated()) {}
다음과 같이 코드를 수정하십시오.
최종 목록 선물 = new ArrayList (NUMBER_OF_WORKERS); final ExecutorService threadPool = Executors.newFixedThreadPool (NUMBER_OF_WORKERS);
for (int i = 0; i <NUMBER_OF_WORKERS; i ++) {최종 작업자 작업자 = new Worker (...); futures.add (threadPool.submit (작업자)); }
for (최종 미래 미래 : 미래) {future.get (); }
// 여기에 도착하면 모든 작업자가 작업을 완료 할 수 있습니다.
모든 작업자가 완료 될 때까지 기다리는 모범 사례는 무엇입니까?
생성자에서 대기 할 스레드 수를 지정하고 스레드간에 해당 인스턴스를 공유하고 모든 스레드가 api를 사용하여 완료 될 때까지 기다릴 수있는 CountDownLatch (일회성 활동이라고 가정) 를 사용하는 것이 좋습니다. await
시간 초과 또는 전체 차단 사용) 및 스레드의 호출 countdown
API가 완료되면.
또 다른 옵션은 완료하려는 각 스레드에 액세스 할 수있는 경우 스레드에서 join 메소드 를 호출 하여 완료를 기다리는 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다