1.测试(可见性)
1.1 代码
public class JMMTest {
private static int num = 0;
public static void main(String[] args) {
new Thread(()->{
while (num==0) {
}
}).start();
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
//已经变成1了,但是程序没有停止
num = 1;
System.out.println(num);
}
}
1.2 结果
1.3 加入 volatile修饰后
2. 测试(不保证原子性)
2.1 代码
public class JMMTest2 {
//加入volatile
private static int num = 0;
public static void add() {
num++;
}
public static void main(String[] args) {
for (int i = 0; i < 20; i++) {
new Thread(()->{
for (int j = 0; j < 1000; j++) {
add();
}
}).start();
}
while (Thread.activeCount()>2) {
Thread.yield();
}
System.out.println(num);
}
}
加入synchronized后