我创建了一些工作流程,如何等待我创建的所有线程。此示例适用于 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);
}
}