の呼び出し間で確実にどうすればいいですか?stack.isEmpty()とstack.pop()スタックは別のスレッドからアクセスされませんか?スタックが空であるかどうか同時にチェックする
executor.submit(()->{
File currentDirectory;
while(!directoryToSearch.isEmpty()) {
currentDirectory = directoryToSearch.pop();
....
}
}
ラッピング:tryおよびcatchブロックまたはすでに同期されたデータ構造のロックを作成する
while ((currentDirectory = directoryToSearch.pop()) != null)
は、単純に良い解決策のように感じることはありません。
スタックは、その上にn個のスレッドを解放する前に埋められ、再び埋められません。私が見ている問題は、最後のオブジェクトでは、複数のスレッドがstack.isEmpty()チェックを渡して、スレッドの1つが他のすべてのスレッドの例外を発生させる1つの要素をポップする前にチェックすることです。
キーワードを追加することで、常に関数を同期させることができます:public static synchronized int getCount() –