-
共享变量可见性实现原理查看全部
-
两条规定查看全部
-
JMM 线程通过工作内存和主内存进行交互查看全部
-
jmm查看全部
-
导致共享变量在线程间不可见的原因: 线程的交叉执行 synchronized (原子性)可以解决 重排序结合线程交叉执行 synchronized (原子性) 可以解决 共享变量更新后的值没有在工作内存与主内存间及时更新 synchronized (原子性) 可见性规范 volatile关键字 能够保证volatile变量的可见性 不能保证volatitle变量的复合操作的原子性 解决方案 使用synchronized关键字 使用ReentrantLock(java.until.concurrent.lock) 使用AtomicInterger(java.until.concurrent.atomic) volatile如何实现可见性 深入来说:通过加入内存屏障和禁止重排序优化来实现的 对volatile变量执行写操作时,会在写操作后加入一条store屏障指令 对volatitle变量执行读操作,会在读操作前加入一条load屏障指令 线程写volatile变量的过程: 改变volatile线程工作内存中volatile变量副本的值 将改变后副本的值从工作内存刷新到主内存中 线程读volatile变量的过程: 从主内存中读取volatile变量最新的值到线程的工作内存中 从工作内存中读取volatile变量的副本 volatile和synchronized比较 volatile不需要加锁,比synchronized更轻量级,不会阻塞线程 从内存可见性看,volatile读相当于加锁,volatile写操作相当于解锁 synchronize既能保证可见性也能保证原子性,volatile只能保证可见性,不能保证原子性 final也可保证内存可见性 ong,double 变量读写可能不是原子操作 java内存模型允许jvm将没有被volatile修饰的64位数据类型的读写操作划分为两次32位来读写查看全部
-
64位数据long、double注意查看全部
-
synchronized实现可见性查看全部
-
volatile实现可见性查看全部
-
可见性分析查看全部
-
重排序的影响查看全部
-
重排序查看全部
-
Synchronize实现可见性查看全部
-
可见性查看全部
-
共享变量可见性实现的原理查看全部
-
JMM两条规定查看全部
举报
0/150
提交
取消