作成したすべてのスレッドを待機するワークフローを作成しました。この例は 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);
}
}