多线程
原子性可见性有序性
Java内存模型
Java内存模型规定了所有的变量都存储在主内存中每条线程都会有自己的工作内存,线程对变量的所有操作都必须在工作内存中进行
内存间的八个原子性操作
lock 锁定read 读取load 载入use 使用assign 赋值store 存储write 写入unlock 解锁
volatile
volatile 保证了可见性、有序性
可见性
volatile是非阻塞的,当一个变量在自己的工作线程中操作完成变量之后,会把当前的值马上刷新到主内存中,其他线程就可以看到当前变量最新的值,这就是多线程特性的可见性, 有序性
使用volatile变量的第二个雨衣是禁止指令重排序优化,禁止指令重排是是为了尽量少的中端流水线
哪些指令不能重排,Happen-Before规则
程序次序规则管程锁规则volatile变量规则线程启动规则线程终止规则线程中断规则对象终结规则传递性