各种锁机制的底层实现---synchronized的偏向锁轻量级锁重量级锁

本文详细介绍了Java中的synchronized锁机制,包括偏向锁、轻量级锁和重量级锁的原理与实现。在JDK 1.6之后,引入偏向锁和轻量级锁以优化没有多线程竞争的场景,减少性能开销。文章讲解了锁的状态转换,以及对象头在锁机制中的作用,强调了在不同锁状态下的对象头mark word的变化。同时,文章提到了批量重偏向和撤销机制,以适应不同场景下的锁需求。
摘要由CSDN通过智能技术生成
学习自这篇文章

https://github.com/farmerjohngit/myblog/issues/12

以下是我自己总结的笔记,方便复习,发出来也希望可以和大家一起交流。
JDK版本是8.
Java中提供了两种实现同步的基础语义:synchronized方法和synchronized块, 我们来看个demo:
public class SyncTest {
   
    public void syncBlock(){
   
        synchronized (this){
   
            System.out.println("hello block");
        }
    }
    public synchronized void syncMethod(){
   
        System.out.println("hello method");
    }
}

通过反编译工具对他们分别进行反编译发现他们有这些不同:

对于synchronized关键字而言,javac在编译时,会生成对应的monitorenter和monitorexit指令分别对应synchronized同步块的进入和退出,有两个monitorexit指令的原因是:为了保证抛异常的情况下也能释放锁,所以javac为同步代码块添加了一个隐式的try-finally,在finally中会调用monitorexit命令释放锁。而对于synchronized方法而言,javac为其生成了一个ACC_SYNCHRONIZED关键字,在JVM进行方法调用时,发现调用的方法被ACC_SYNCHRONIZED修饰,则会先尝试获得锁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值