volatile保证了线程间变量的可见性,线程对变量修改之后,立刻写回到主内存,线程对变量读取的时候,要从主内存中读,而不是缓存,volatile不能保证原子性,也就是轻量级的synchronized,多线程中保证了数据的同步性,避免了指令重排
package cn.com.thread;
public class TestVolatile {
//private volatile static int num = 0;
private volatile static int num = 0;
public static void main(String[] args) {
//volatile用于保证多线程数据的同步,也就是可见性,轻量级的synchronized
//也可避免指令重排
// new Thread(()->{
// while(num == 0) {//此处不要编写代码
// //没有时间同步修改的num
// }
// }).start();
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// num = 1;
new Thread(()->{
while(num == 0) {
}
}).start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
num = 1;
}
}