没有合适的资源?快使用搜索试试~ 我知道了~
Java并发机制的底层实现原理.pdf
需积分: 42 24 下载量 137 浏览量
2019-08-02
20:30:04
上传
评论
收藏 554KB PDF 举报
温馨提示
试读
1页
主要总结了:本地内存和线程安全的问题、volatile、synchronized、处理器实现并发的方式、Java实现并发的方式。
资源推荐
资源详情
资源评论
Java并发机制的底层实现原理
volatile
相比syn锁不会引起线程上下文切换和调度
lock和add前缀指令作用
将当前处理器缓存行的数据写回到系统内存
这个写会内存的操作会使在其他CPU里缓存里该
内存地址的数据无效
原因:再多处理器下,为了保证多个处理器缓存
是一致的,就会实现缓存一致性协议。每个处理
器通过嗅探在总线上传播的数据来检查自己缓存
的数据是不是过期了,当处理器发现自己缓存行
对应的内存地址被修改,就会将当前处理器的缓
存行设置为无效状态。当处理器对数据进行修
改,会重新从系统内存中把数据读到处理器缓存
行里。
禁止指令重排序
Synchronized的实现原理
实现同步的基础,Java中的每个对象都可以作为锁
对于普通同步方法,锁是当前实例对象
对于静态同步方法,锁是当前类的Class对象
对于同步方法块,锁是Synchronized括号里配置
的对象
Java对象头
三个字宽存储数组,两个字宽存储非数组,一个
字宽四字节。其中Mark Word随着锁的标识位变
化。
锁的升级和对比
偏向锁
存在竞争时才会撤销偏向锁(全局安全点)
关闭偏向锁,默认进入轻量级锁状态 -XX:-UseBiasedLocking=false
轻量级锁
如果遇到线程竞争锁,涉及到自旋操作,偏向锁
中不涉及
重量级锁 ;指令级别的的锁
锁可以升级但是不能降级,目的是为了提高获得
锁和释放锁的效率
原子操作的实现原理
1、处理器CPU如何实现原子操作
(1)使用总线锁保证原子性
总线锁就是使用处理器提供的一个LOCK#信号,
当一个处理器在总线上输出此信号时,其他处理
器的请求将被阻塞住,那么该处理器可以独占共
享内容
(2)使用缓存锁保证原子性
在同一时刻,我们只需保证对某个内存地址的操
作是原子性即可,但是总线锁定把CPU和内存之
间的通信锁住了,其他处理器不能操作其他内存
地址数据,总线开销比较大
缓存锁定是指内存区域如果被缓存在处理器的缓
存行中,并且在Lock操作期间被锁定,那么当他
执行锁操作写回到内存时,处理器不再总线上声
言Lock#信号,而是修改内部的内存地址,并允
许它的缓存一致性保证操作的原子性,因为缓存
一致性会阻止同时修改由两个以上处理器缓存的
内存区域数据,当其他处理器回写已被锁定的缓
存行的数据时,会使缓存行无效。
2、Java如何实现原子操作
使用CAS方式
利用了处理器提供的指令实现
问题
ABA问题
循环时间长开销大
只能保证一个共享变量的原子操作 可以将多个变量合成一个变量
使用锁
https://blog.csdn.net/lxiansheng001
资源评论
秦始皇的天下
- 粉丝: 100
- 资源: 20
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功