锁概念笔记

今天听了一节马士兵的公开课,对 锁的概念讲的很不错,记录下来备忘。

 

锁的概念是synchronized(object) 锁定对象;

锁有两种:

一种是乐观锁(即应用App层实现一个while循环compareandchange):即所有人都可以读取object,但当回写时,需要比对object是否还是之前读取的object,如果是,进行会写,如果不是,读取新的object,然后进入下一次循环。

乐观锁有2个问题:

1.ABA问题

ABA的问题在执行涉及到指针的操作时,很有可能导致虽然值(指针地址)没有发生变化;但值背后的意义已经发生了变化(例如地址中的内容发生了改变),解决办法是加一个版本来管理

2.compare和change行为没有原子性

JAVA通过lock_if_mp在总线上锁定对应的北桥信号以实现原子性

 

二种是系统实现的悲观锁(重量级锁):

OS层面通过等待队列进行调度,当一个thread拿到这个锁时,其他队列等待。

 

两种锁各有千秋,synchronize默认会使用乐观锁,当乐观锁达到一定的循环次数时,自动升级为悲观锁。

 

另外:synchornized在上锁前还有一个“偏向锁”,即第一个调用thread调用时 不加锁,而是直接将自己的指针赋值给这个object,规避加锁开销。当有第二个thread来申请该object时,撤销偏向锁升级为乐观锁。

 

 

注:锁的信息均存在于对象的OFFSET中的markdown:(8Byte)

001 无锁

00 轻量级锁  (前62位指向线程的lock record指针)

101 偏向锁 (前54位指向当前线程的指针)

10 重量级锁

11 GC标记消息

 

https://www.cnblogs.com/looyee/articles/10749728.html

https://www.jianshu.com/p/f30ce3a657bd

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值