Volatile

volatile

1、java线程内存模型将确保所有线程看到这个变量的值是一致的

2、不会引起线程上下文切换和调度

3、轻量级synchronized

内存屏障(内存栅栏)

可见性、有序性

变量缓存行回写系统内存

缓存一致性协议

处理器发现缓存行对应内存地址被修改,设置为无效状态,操作时重新读取系统内存

对象创建3个指令

1、获取对象内存地址

2、初始化对象

3、内存地址指向引用变量

ConcurrentHashMap

value由volatile修饰,不会出现数据读写不一致

get方法逻辑,key通过hash定位到segment,再hash定位到具体元素

与synchronized区别

1、volatile轻量,不会引起线程上下文切换和调度

2、volatile本质是告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主内存读取,synchronized则是锁定当前变量,只有当前线程可以访问,其他线程阻塞

3、volatile只能修饰变量

4、volatile实现变量的可见性、禁止重排序、单次读写原子性

5、volatile不会造成线程阻塞

浙ICP备11005866号-12