<分区>
我有一个简单的 TestThreadClientMode
类来测试竞争条件。我尝试了两次:
- 当我运行以下代码并在第二个线程中注释
System.out.println(count);
时,输出为:
操作系统:Windows 8.1
标志完成设置为真
...
第二个线程永远存在。因为第二个线程永远不会看到由主线程设置为 true 的 done
标志的变化。
当我取消注释
System.out.println(count);
时,输出是:操作系统:Windows 8.1 0 ... 190785 190786 标志完成设置为真 完毕! Thread-0 true
程序在 1 秒后停止。
System.out.println(count);
如何让第二个线程看到 done
的变化?
代码
public class TestThreadClientMode {
private static boolean done;
public static void main(String[] args) throws InterruptedException {
new Thread(new Runnable() {
public void run() {
int count = 0;
while (!done) {
count ++;
//System.out.println(count);
}
System.out.println("Done! " + Thread.currentThread().getName() + " " + done);
}
}).start();
System.out.println("OS: " + System.getProperty("os.name"));
Thread.sleep(1000);
done = true;
System.out.println("flag done set true ");
}
}