내가 만든 모든 스레드를 기다리는 방법을 몇 가지 워크 플로로 만들었습니다. 이 예제는 99 %의 경우에서 작동하지만 waitForAllDone 메서드가 더 빨리 완료되고 모든 스레드가 완료되는 경우가 있습니다. waitForAllDone 후 내가 만든 스레드를 사용하는 스트림을 폐쇄하고 있기 때문에 그래서 다음 예외가 발생 알고모든 스레드가 완료 될 때까지 기다리는 방법
Caused by: java.io.IOException: Stream closed
내 스레드 시작 :
@Override
public void run() {
try {
process();
} finally {
Factory.close(this);
}
}
마감 : 나는
protected static void close(final Client client) {
clientCount--;
}
을 만드는 thread 전화 :
public RobWSClient getClient() {
clientCount++;
return new Client();
}
공장 내부
및 clientCount 변수 :
private static volatile int clientCount = 0;
대기 :
public void waitForAllDone() {
try {
while (clientCount > 0) {
Thread.sleep(10);
}
} catch (InterruptedException e) {
LOG.error("Error", e);
}
}
자바의 세마포어 문서를 확인하십시오. 이 예제는 거의 동일하며 필요한 것은 다음과 같습니다. http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html –