JMM和volatile
volatile: java内置关键字,轻量级的同步机制 (锁机制的削弱版)
volatile特性:
- 保证可见性
- 不 保证原子性
- 禁止指令重排
可见性:一种通知机制
JMM: Java内存模型
JMM是虚拟的不存在的东西(概念,约定)
约定:
- 线程加锁前,必须读取,内存中最新的,变量值
- 线程解锁前,必须将自己对变量的修改,同步到内存
- 加锁,解锁是同一把锁
java对主内存的操作*
执行引擎<–操作use–线程工作内存<–加载load–拷贝变量<–读取read–主内存
执行引擎–反馈assign–>线程工作内存–储存store–>主内存–写入write–>主内存
线程操作时需要加锁lock,执行结束后需要解锁unlock
volatile保证可见性
由于线程操作时,使用的都是内存变量的副本
所以当一个线程对变量进行更改后,其他线程不能及时得到更改后的值,将会导致一些可见性问题
volatile不保证原子性
java原子性: 只线程,事务不可分割,具有原子性的量,同一时刻只能有一个线程来对它进行操作