1-JMM和volatile
2021-05-28 17:46:51 1 举报
AI智能生成
JMM模型、volatile、可见性
作者其他创作
大纲/内容
1、八大原子操作
主内存
- lock(锁定):把一个变量标记为一条线程独占状态
- unlock(解锁):把一个处于锁定状态的变量释放出来,释放后 的变量才可以被其他线程锁定
- read(读取):把一个变量值从主内存传输到线程的工作内存 中,以便随后的load动作使用
- load(载入):把read操作从主内存中得到的变量值放入工 作内存的变量副本中
工作内存
- use(使用):把工作内存中的一个变量值传递给执行引擎
- assign(赋值):把一个从执行引擎接收到的值赋给工作内 存的变量
- store(存储):把工作内存中的一个变量的值传送到主内存 中,以便随后的write的操作
- write(写入):把store操作从工作内存中的一个变量的值 传送到主内存的变量中
2、三大特性
原子性
概念:一个操作是不可中断的,即使是在多线程环境下,一个操作一旦开始就不 会被其他线程影响
可见性(volatile)
- 概念:是当一个线程修改了某个共享变量 的值,其他线程是否能够马上得知这个修改的值
- volatile:
早期:lock指令,总线锁实现
后期:缓存一致性协议(MESI)
有序性
volatile可保证有序性
通过内存屏障实现
- Load Barrier 读屏障
- Store Barrier 写屏障
- JVM中提供了四类内存屏障指令
LoadLoad:保证load1的读取操作在load2及后续读取操作之前执行
StoreStore:在store2及其后的写操作执行前,保证store1的写操作
LoadStore:在stroe2及其后的写操作执行前,保证load1的读操作已读
StoreLoad:保证store1的写操作已刷新到主内存之后,load2及其后的读
单例的懒汉式多线程指定重排后会出现问题
0 条评论
下一页