JDK 多线程相关
时间:12-14来源:作者:点击数:
城东书院 www.cdsy.xyz
volatile 关键字
- Java 内存模型
- 每条线程都有自己的工作内存
- 工作内存保存了被该线程使用到的变量的主内存的副本拷贝
- 变量值的传递需要通过主内存完成(可能存在多线程问题)
- 解决方法:
- 使用 volatile 时的内存屏障
- 读的时候:
- 写的时候:
- 写之前
- 写之后
- SL 内存屏障(保守策略)
- 它会使该屏障之前的所有内存访问指令(存储指令和访问指令)完成之后,才执行该屏障之后的内存访问指令
- Store
- Load
- happens-before
cas 算法
- 硬件对于并发操作的支持
- 内存值 V 、预估值 A 、更新值 B
- 提供了很多支持原子操作的类: AtomicInteger
threadLocal
- 在当前线程中保存的变量副本
- 实际的通过 ThreadLocal 创建的副本是存储在每个线程自己的 threadLocals 中的
- 继承自 WeakReference :当 ThreadLocal 不再被引用时,因为弱引用机制原因,当 jvm 发现内存不足时,会自动回收弱引用指向的实例内存
- 键值为当前 ThreadLocal 变量, value 为变量副本
- 请求调用链中信息存储
城东书院 www.cdsy.xyz
方便获取更多学习、工作、生活信息请关注本站
微信公众号
