sleep()将在测试volatile时防止Java内存不一致
我正在测试sleep()将在测试volatile时防止Java内存不一致,java,multithreading,volatile,Java,Multithreading,Volatile,我正在测试volatile关键字的内存一致性函数 这是不使用volatile的代码,程序将按预期卡住 package cn.demojie.singleton; public class VolatileTest2 { private static boolean flag = false; public static void main(String[] args) throws Exception { new Thread( () -> {
volatile
关键字的内存一致性
函数
这是不使用volatile的代码,程序将按预期卡住
package cn.demojie.singleton;
public class VolatileTest2 {
private static boolean flag = false;
public static void main(String[] args) throws Exception {
new Thread(
() -> {
while (!flag) {
/* Uncomment it, the program won't get stuck anymore
try {
Thread.sleep(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
*/
}
})
.start();
Thread.sleep(50);
flag = true;
}
}
但是当我像上面的注释一样添加Thread.sleep()
时,程序就不会再卡住了
看来记忆的一致性是有效的。为什么?
System.out.println()
还可用作线程.sleep()