我創建了一些工作流如何等待我創建的所有線程。這個例子在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--;
}
當我創建線我稱之爲:
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);
}
}
查看java中的信號量文檔。該示例幾乎相同,您需要:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html –