synchronized实现原理

synchronized底层实现原理

对共享资源的争抢操作会导致线程安全问题,synchronized关键字可以使我们的类、方法、代码块以线程安全的方式执行。

也就是对于共享资源,同一时刻只能有一个线程对其进行操作,其他线程必须排队等着。

知其然不知其所以然,synchronized是如何做到线程安全的。

加锁。

锁又分为好多,悲观锁,乐观锁,synchronized属于悲观锁。

悲观锁,顾名思义,就是很悲观,总是认为别人会来抢夺资源,所以任何操作都会加锁,获取到锁的线程才能运行,获取不到锁的只能等到锁释放然后去抢夺(分公平锁和非公平锁)。

这些锁的概念完全可以根据字面意思来理解,怎么命名的就怎么理解。

在JVM虚拟机里有讲到,堆中生成的对象实例分为三个部分,对象头、实例数据、对其补充。

有关于锁的锁标志,锁状态,偏向锁,等等信息都存放在这个对象头里。

synchronized依托于对象头里的一个monitor对象。

这个monitor有两个原理,互斥以及协作。

当对象被一个线程持有,锁状态赋值为1,线程重新进入持有对象,这个值继续加1,所以synchronized是可重入锁。

释放锁,值减1,当值为0,多个线程可以争夺这把锁。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值