Я вижу этот код довольно часто в некоторых модульных тестах OSS, но насколько безопасен поток? Является ли цикл while гарантированно видеть правильное значение invoc?
Если нет; nerd указывает на того, кто также знает, какая архитектура процессора может завершиться.
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);
}
}