Synchronized原理

本文详细介绍了Java中的synchronized原理,包括Monitor的工作机制、锁升级的过程,如轻量级锁、锁膨胀、自旋优化及偏向锁的详细机制。文章还探讨了偏向锁的撤销条件,如调用对象hashCode、其他线程使用对象以及调用wait/notify。通过了解这些,读者可以深入理解Java并发中的锁机制。
摘要由CSDN通过智能技术生成

Monitor 原理

在这里插入图片描述

Synchronized原理

	static final Object lock = new Object();
	static int counter = 0;
	public static void main(String[] args) {
   
		synchronized (lock) {
   
			counter++;
		}
}

对应的字节码为:

public static void main(java.lang.String[]);
	descriptor: ([Ljava/lang/String;)V
	flags: ACC_PUBLIC, ACC_STATIC
	Code:
		stack=2, locals=3, args_size=1
			0: getstatic #2 // <- lock引用 (synchronized开始)
			3: dup
			4: astore_1 // lock引用 -> slot 1
			5: monitorenter // 将 lock对象 MarkWord 置为 Monitor 指针
			6: getstatic #3 // <- i
			9: iconst_1 // 准备常数 1
			10: iadd // +1
			11: putstatic #3 // -> i
			14: aload_1 // <- lock引用
			15: monitorexit // 将 lock对象 MarkWord 重置, 唤醒 EntryList
			16: goto 24
			19: astore_2 // e -> slot 2
			20: aload_1 // <- lock引用
			21: monitorexit // 将 lock对象 MarkWord 重置, 唤醒 EntryList
			22: aload_2 // <- slot 2 (e)
			23: athrow // throw e
			24: return
		Exception table:
			from 	to 	target 	type
			6 		16 	19 		any
			19 		22 	19 		any
		LineNumberTable:
			line 8: 0
			line 9: 6
			line 10: 14
			line 11: 24
		LocalVariableTable
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

TigRer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值