Java并发编程艺术----读书笔记(二)



java并发编程艺术2

java并发机制的底层实现。

java-》编译——》。class字节码-》字节码加载到JVM-》字节码转化为汇编让cpu执行。

1volatile

 

 

2volatile的定义

 

 

3volatile追加字节提高效率。

 

 

64字节行宽,当不足64字节是不同节点出现在统一缓存行,会出现相互加锁的情况。

 

 

2synchronized

 

 

1、轻量级锁:轻量级锁不使用互斥量来进行加锁。它是在没有多线程竞争的情况下,减少重量级锁使用互斥量的方式加锁的开销。

 

 

 

对象头主要用来存储对象自身的运行数据。

 

1JVM在线程运行同步块之前创建栈帧用于存储锁记录的空间。

2将(所需访问的对象的)对象头中的markword复制到锁记录中。

3线程使用cas操作将markword替换成指向锁的指针,成功即加锁,失败则自旋。

 

 

2、偏向锁:

 

 

1锁不存在竞争并且由单一线程多次获得时使用偏向锁。

2锁记录中记录偏向锁的线程id,此后不需要cas操作来加锁或解锁。只需测试markword里是否存储偏向锁。

3测试成功则已获得锁,否则测试一下偏向锁标识,如果没有设置则使用cas竞争,如果设置了就用cas将偏向锁指向当前线程。

 

3自旋锁

 

 

1线程阻塞需要挂起线程和恢复线程,需要切换到内核态完成。

2有时候共享数据的锁定只会持续很短的时间,为其去挂起和恢复不值得。

3如果多线程并发访问同一对象,可以不对另一线程挂起,而是让它自旋(忙循环)。

 

对比:

 

 

4、原子操作

 

  

  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java技术江湖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值