JDK 多线程相关
volatile
关键字
Java
内存模型- 每条线程都有自己的工作内存
- 工作内存保存了被该线程使用到的变量的主内存的副本拷贝
- 变量值的传递需要通过主内存完成(可能存在多线程问题)
- 解决方法:
- 使用
volatile
时的内存屏障- 读的时候:
- 读之后
LL
内存屏障- 读操作重复
LS
内存屏障- 写操作重复
- 读之后
- 写的时候:
- 写之前
SS
内存屏障
- 写之后
SL
内存屏障(保守策略)- 它会使该屏障之前的所有内存访问指令(存储指令和访问指令)完成之后,才执行该屏障之后的内存访问指令
- 写之前
- 读的时候:
Store
- 将处理器缓存中的数据刷新到内存
Load
- 内存拷贝数据到缓存
happens-before
- 使用
cas
算法
- 硬件对于并发操作的支持
- 内存值
V
、预估值A
、更新值B
- 提供了很多支持原子操作的类:
AtomicInteger
threadLocal
- 在当前线程中保存的变量副本
- 实际的通过
ThreadLocal
创建的副本是存储在每个线程自己的threadLocals
中的 - 继承自
WeakReference
:当ThreadLocal
不再被引用时,因为弱引用机制原因,当jvm
发现内存不足时,会自动回收弱引用指向的实例内存 - 键值为当前
ThreadLocal
变量,value
为变量副本 - 请求调用链中信息存储
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 换钱的最小货币数
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论