volatile可以保证可见性和原子性,具体分析见https://www.cnblogs.com/BonnieWss/p/12198101.html
场景1:原子操作
int a=0;//语句1
int b=0;//语句2
volatile int c=0;//语句3
int d=0;//语句4
int e=0;//语句5
加上volatile后,语句2和语句3不会重排,语句3和语句4也不会重排。
语句1和语句2可能重排,语句4和语句5可能重排
场景2:非原子操作
//eg1:
volatile Student student=null;
student=new Student();
?
//eg2:
volatile int f=0;
f++;
对于非原子操作的变量,被volatile修饰后,非原子操作的每一小步都不会重排序。
原文:https://www.cnblogs.com/BonnieWss/p/12198488.html