关于synchronized之面试题整理

synchronized实现原理

Synchronized是由一对
monitorenter/monitorexit指令实现的,
monitor是对象同步实现的基本单元,在java 6之前,monitor的实现完全依靠操作系统内部的互斥锁实现的,因为需要进行用户态到内核态的转换,所以同步操作是一个无差别的重量级的操作,性能也很低,但在java 6 的时候,java虚拟机对此进行了,大刀阔斧的改进,提供了三种不同的monitor的实现,也就是常说的三种不同的锁,:偏向锁,轻量锁,重量锁,大大改进其性能

多线程中锁升级的原理

synchronized锁升级的原理:
在锁对象的对象头里面有一个threadid字段,在第一次访问的时候threadid为空,jvm让其持有偏向锁,并将threadid设置为其线程id,再次进入时会先判断threadid是否与其线程id一致,如果一致则直接使用此对象,如果不一致,则升级偏向锁为轻量级锁,通过自旋循环一定次数来获取锁,执行到一定次数之后,如果还没有正常获取到锁,此时就会把轻量级锁升级为重量级锁,此过程就构成了synchronized锁的升级的原理

什么是死锁

当线程A持有独占锁a,并尝试去获取独占锁b的同时,线程B持有独占锁b,并尝试获取独占锁a的情况下,就会发生AB两个线程由于互相持有对方需要的锁,而发生的阻塞现象,我们称之为死锁

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值