目录
volatile是什么
volatile是java虚拟机提供的轻量级同步机制
- 保证可见性
- 禁止指令重排序
- 不保证原子性
可见性
不保证原子性
/**
* Tips:
*
* @author Liuq
* @version 2019年10月16日
*/
public class VolatileDemo {
public static void main(String [] args){
MyData myData = new MyData();
for(int i = 1; i <=20; i++) {
new Thread(()->{
for(int j = 0; j < 1000; j++) {
myData.add();
}
},String.valueOf(i)).start();
}
//等到上面的线程都完成后再获取最后的值
while (Thread.activeCount()>2){
Thread.yield();
}
System.out.println(Thread.currentThread().getName() + " final number :"+myData.n);
}
}
class MyData{
public volatile Integer n=0;
public void add(){
n++;
}
}
使用Atomicxxx类
禁止指令重排序
在执行程序时,为了提高性能,编译器和处理器常常会对指令进行重排序。一般重排序可以分为如下三种:如图,1属于编译器重排序,而2和3统称为处理器重排序。