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、原子操作

 

  

 


版权声明:本文为a724888原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。