同步方法块和同步方法

JVM层面的不同
1)同步方法,JVM采用ACC_SYNCHRONIZED标记符来实现同步
详解:
​ a.方法级的同步是隐式的,同步方法的常量池中会有一个ACC_SYNCHRONIZED标志。
​ b.当某个线程要访问某个方法时,会检测是否有ACC_SYNCHRONIZED,如果有,则需要先获得监视器 锁,然后开始执行方法,方法执行之后再释放监视器锁。
​ c.这时如果其他线程来请求执行方法,会因为无法获得监视器锁而被阻断
​ d.如果方法执行过程中,发生异常,并且方法内部没有异常处理,那么在一次呗跑到方法外面之前,监视器锁会被自动释放

2)同步代码块,JVM采用monitorenter、monitorexit两个指令来实现同步
详解:
​ a.可以把执行monitorenter理解为加锁,执行monitorexit理解为释放锁
​ b.每个对象维护着一个记录着被锁次数的计数器,未被锁定的对象的该计数器为0
​ c.当一个线程获得锁后,该计数器自增1,当同一个线程再次获得该对象的锁时,计数器再次自增
​ d.当同一个线程释放锁时,计数器再自减。
​ e.当计数器为0时,锁被释放,其他线程便可以获得锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值