我创建了一些工作流如何等待我创建的所有线程。这个例子在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 –