原始代码
public class Test {
public static boolean flag = false;
public static void main(String[] args) throws Exception {
new Thread(() -> {
while (true) {
if (flag) {
System.out.println("flag可见为true");
}
}
}).start();
Thread.sleep(500);
flag = true;
System.out.println("改变flag的值为:" + flag);
}
}
不会打印:flag可见为true
在变量读取时的循环里加入 synchronized
public class Test {
public static boolean flag = false;
public static void main(String[] args) throws Exception {
new Thread(() -> {
while (true) {
synchronized (Test.class){ //加入同步
if (flag) {
System.out.println("flag可见为true");
}
}
}
}).start();
Thread.sleep(500);
flag = true;
System.out.println("改变flag的值为:" + flag);
}
}
会打印:flag可见为true
在变量读取时的循环外加入 synchronized
public class Test {
public static boolean flag = false;
public static void main(String[] args) throws Exception {
new Thread(() -> {
synchronized (Test.class) { //加入同步
while (true) {
if (flag) {
System.out.println("flag可见为true");
}
}
}
}).start();
Thread.sleep(500);
flag = true;
System.out.println("改变flag的值为:" + flag);
}
}
不会打印:flag可见为true
在变量写入时加入 synchronized
public class Test {
public static boolean flag = false;
public static void main(String[] args) throws Exception {
new Thread(() -> {
while (true) {
if (flag) {
System.out.println("flag可见为true");
}
}
}).start();
Thread.sleep(500);
synchronized (Test.class) { //加入同步
flag = true;
}
System.out.println("改变flag的值为:" + flag);
}
}