版权声明:本文为博主原创文章,未经博主允许。 /a724888/article/details/64214595
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、原子操作