我在一些 OSS 单元测试中经常看到这段代码,但它是线程安全的吗?while 循环是否保证看到 invoc 的正确值?
如果不; nerd 指出谁也知道这可能会在哪个 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);
}
}