在这里插入代码片
@TOC
#volatie是什么?
java虚拟机提供的轻量级的同步机制,保证可见性(一个线程修改完自己的内存空间的值并写回到主内存必须立即通知其他线程)、不保证原子性、禁止指令重排既有序性
代码验证
package org.example.yang;
import java.util.concurrent.TimeUnit;
public class VolatileDemo {
public static void main(String[] args) { // 一切方法的运行入口
MyData myData = new MyData();
new Thread(() -> {
System.out.println(Thread.currentThread().getName()+ "\t come in");
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
myData.addTO60();
System.out.println(Thread.currentThread().getName()+ "\t updated number value: " + myData.number);
},"A").start();
while (myData.number == 0){
}
System.out.println(Thread.currentThread().getName()+ "\t mission is over,main get value: " + myData.number);
}
}
class MyData{
int number = 0;
public void addTO60(){
this.number = 60;
}
}
不加volatile关键字,当A线程修改完number为60时,主线程number仍然为0,最后一句无法打印出来
运行结果:
添加volatile关键字后