一部のOSS単体テストでこのコードが頻繁に見られますが、スレッドセーフですか?whileループは、invocの正しい値を確認することが保証されていますか?
いいえの場合; オタクは、これが失敗する可能性のあるCPUアーキテクチャを知っている人を指しています。
private int invoc = 0;
private synchronized void increment() {
invoc++;
}
public void isItThreadSafe() throws InterruptedException {
for (int i = 0; i < TOTAL_THREADS; i++) {
new Thread(new Runnable() {
public void run() {
// do some stuff
increment();
}
}).start();
}
while (invoc != TOTAL_THREADS) {
Thread.sleep(250);
}
}