上一篇文章说到了JMM可见性的案例 链接: Java内存模型之可见性(二).
volatile
volatile关键字是可以保证线程间的可见性,线程间通信,可以认为是轻量级的synchronized.
特点:
- 保证可见性
- 不保证原子性
- 禁止指令重排序
案例
class Data{
volatile int number=0;
public void addTo60(){
this.number = 60;
}
}
public class Main {
public static void main(String[] args) {
Data data = new Data();
new Thread(()->{
System.out.println(Thread.currentThread().getName()+" come in");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
data.addTo60();
System.out.println(Thread.currentThread().getName()+ "updated value"+data.number);
},"t1").start();
System.out.println("加了volatile程序死循环不存在啦");
while (data.number == 0){
}
System.out.println(data.number);
}
}
程序输出
流程图
总结
加了volatile关键字后线程之间的可见性得到了保障,可以实现通信.