(实践)一文搞定synchronized锁升级过程

        <dependency>
            <groupId>org.openjdk.jol</groupId>
            <artifactId>jol-core</artifactId>
            <version>0.16</version>
        </dependency>

一、实现锁升级(轻量级锁实现不出)

public class MySynchronizedLock {


    public static void main(String[] args) {
        Object obj = new Object();

        // 1. 无锁状态
        System.out.println("无锁状态");
        System.out.println(ClassLayout.parseInstance(obj).toPrintable());

        // 2. 偏向锁状态
        synchronized (obj) {
            System.out.println("偏向锁状态");
            System.out.println(ClassLayout.parseInstance(obj).toPrintable());
        }

        // 3. 轻量级锁状态
        new Thread(() -> {
            synchronized (obj) {
                System.out.println("轻量级锁状态 - 线程1");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(ClassLayout.parseInstance(obj).toPrintable());
            }
        }).start();

        // 4. 重量级锁状态
        new Thread(() -> {
            synchronized (obj) {
                System.out.println("重量级锁状态 - 线程2");
                System.out.println(ClassLayout.parseInstance(obj).toPrintable());
            }
        }).start();
    }

}

结果:

无锁状态
# WARNING: Unable to attach Serviceability Agent. You can try again with escalated privileges. Two options: a) use -Djol.tryWithSudo=true to try with sudo; b) echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
java.lang.Object object internals:
OFF  SZ   TYPE DESCRIPTION               VALUE
  0   8        (object header: mark)     0x0000000000000001 (non-biasable; age: 0)
  8   4        (object header: class)    0xf80001e5
 12   4        (object alignment gap)    
Instance size: 16 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total

偏向锁状态
java.lang.Object object internals:
OFF  SZ   TYPE DESCRIPTION               VALUE
  0   8        (object header: mark)     0x0000700003fe39d0 (thin lock: 0x0000700003fe39d0)
  8   4        (object header: class)    0xf80001e5
 12   4        (object alignment gap)    
Instance size: 16 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total

轻量级锁状态 - 线程1
java.lang.Object object internals:
OFF  SZ   TYPE DESCRIPTION               VALUE
  0   8        (object header: mark)     0x00007fe95f021eba (fat lock: 0x00007fe95f021eba)
  8   4        (object header: class)    0xf80001e5
 12   4        (object alignment gap)    
Instance size: 16 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total

重量级锁状态 - 线程2
java.lang.Object object internals:
OFF  SZ   TYPE DESCRIPTION               VALUE
  0   8        (object header: mark)     0x00007fe95f021eba (fat lock: 0x00007fe95f021eba)
  8   4        (object header: class)    0xf80001e5
 12   4        (object alignment gap)    
Instance size: 16 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total

二、过程

1、无锁

2、偏向锁

3、轻量级锁

通过CAS实现

4、重量级锁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值