나는 결과를 커밋하기 전에 스레드 풀에서 현재 스레드가 실행되고 있지 않은지 확인해야하는 코드를 작성 중이므로 커밋해야하는 데이터가 손실되지 않도록해야합니다.ThreadPoolExecutor의 스레드가 완료되었음을 어떻게 알 수 있습니까?
while (_executor.getActiveCount() > 0)
{
try
{
Thread.sleep(10); // milliseconds
}
catch (InterruptedException e)
{
// OK do nothing
}
}
을하지만 동료 getActiveCount에 대한 문서가 주장하는 검토에서 지적 :이를 위해 내가 사용하고
- 적극적으로 실행
- 있는 스레드의 대략적인 수를 돌려줍니다 작업.
그래서, 여전히 풀에서 활성 스레드가있는 동안 내가 while 루프 나갈 것입니다 위험이있다? 그렇다면 모든 작업자 스레드가 완료 될 때까지 기다리는 올바른 방법은 무엇입니까?
편집 : 더 많은 컨텍스트를 제공하기 위해 :이 온라인 시스템은 실행 프로그램 서비스가 포함 된 태스크가 무기한으로 실행되는 온라인 시스템입니다. 작업은 메시징 시스템을 통해 이루어지며 실행 프로그램에서 스레드가 실행되며 동기화가 필요하지 않으며 작업이 메시징 시스템의 다른 큐로 나옵니다. 나는 작업 완료를 기다리는 집행자를 죽이고 싶지 않습니다.
당신이 작업의 실행 대신 실행 프로그램 작업없이 일을 기다리고 기다릴 수 있을까요? http://stackoverflow.com/questions/12896755/executorservice-with-invokeall-and-future-in-java – zapl