ReentrantLock 实现原理
创始人
2024-05-30 03:41:05
0

ReentrantLock 实现原理


ReentrantLock中依赖了AbstractQueuedSynchronizer 类来实现线程的同步,ReentrantLock的类关系图及依赖情况如图所示:
在这里插入图片描述
ReentrantLock 中定义了一个Sync的同步类,它有两个实现,一个是FairSync(公平同步),一个是NonfairSync(非公平同步),两者分别代表 ReentrantLock 中锁竞争的公平和非公平特性。而Sync同步类继承了AbstractQueuedSychronizer抽象类,对于排他锁的逻辑是在AbstractQueuedSynchronizer中完成的。

AbstractQueuedSynchronizer(AQS) 是ReentrantLock 实现锁同步的核心类,实际上在J.U.C 中大部分组件都依赖于 AbstractQueuedSynchronizer。
AQS中提供了如下两种锁的实现:

  • 独占锁,同一时刻只允许有一个线程获得锁。
  • 共享锁,同一时刻允许有多个线程同时获得锁。

AQS是一个抽象类,所以在使用时,我们需要继承该类,然后实现共享变量state的获取和释放,而AQS帮我们完成了线程等待队列的维护和唤醒,具体需要重写的方法:

  • tryAcquire(int) :独占方式。尝试获取资源,成功则返回true,失败则返回false。
  • tryRelease(int):独占方式。尝试释放资源,成果则返回true,失败则返回false。
  • tryAcquireShared(int):共享方式。尝试获取资源。负数表示失败;0表示成功,但没有剩余可用资源;正数表示成功,且有剩余可用资源。
  • tryReleaseShared(int):共享方式。尝试释放资源,如果释放后允许唤醒后续等待结点则返回true,否则返回false。

以ReentrantLock 重入锁为例,互斥变量state初始值为0,表示未锁定状态。
如果线程t1调用lock()方法,则实际上会调用tryAcquire()方法将 state通过CAS修改为1。
此后,其他线程再调用tryAcquire()方法时就会失败,直到t1线程调用unlock()方法且 state=0之后,其他线程才有机会获得锁。
而t1线程在释放锁之前,可以重复获取该锁资源。
这个重复过程是基于state累加来统计的,这就是可重入的概念。
t1线程重入了多少次就需要释放多少次。

AbstractQueuedSynchronizer 基于排他锁的实现原理如下图所示:
在这里插入图片描述

相关内容

热门资讯

求关于女生寝室的鬼片 求关于女生寝室的鬼片RT~~~~要好看的首选女高怪谈系列,第一部年代久远了些,但是看看无妨,第二部和...
有个修仙小说里,有个诗意的情诗... 有个修仙小说里,有个诗意的情诗。大概意思是有了什么才有什么,几个句子。有人知道嘛?最近总是反反复复的...
贺锦兮顾西城是什么小说 贺锦兮顾西城是什么小说贺锦兮顾西城是《代嫁甜妻》小说。《代嫁甜妻》是香网著名作家明月西所著的总裁类型...
邓泽元的南昌大学教授 邓泽元的南昌大学教授学历简况1981年9月考入江西农业大学畜牧兽医系,1985年获学士学位,同年留江...
造船的介绍 造船的介绍造船是指建造或制造船只的生产工业,一般是在一种专业设施造船厂里的船台或船坞中进行。造船本身...
帝凰之神医弃妃拍成电视剧了吗 帝凰之神医弃妃拍成电视剧了吗不希望是刘诗诗演女主 感觉她演不出来那种感觉没影的事呢!哪来的电视剧女主...
银河帝国16岁能看吗? 银河帝国16岁能看吗?银河帝国16岁,可不可以看一般的话未成年是不能看这种电影的?因为这种太暴力,血...
怎么成为神? 怎么成为神?`哈`反应好激烈啊`我开玩笑滴`神是故事里的人物,要成为神有两种方法,第一是修炼得道成神...
踽踽独行什么意思 踽踽独行解释 踽踽独行什么意思 踽踽独行解释1、踽踽独行,汉语成语,拼音是jǔ jǔ dú xíng,意思是孤零零...
谁有神医小农民炊饼哥哥406章 谁有神医小农民炊饼哥哥406章可以啊。。。。
请问开洗脚城需要办哪些手续? 请问开洗脚城需要办哪些手续?到工商部门咨询就知道了
佛弟子如何向大众弘扬佛法 佛弟子如何向大众弘扬佛法一、财布施:分内财、外财。譬如布施你的体力,帮别人劳动就是内财布施;布施掉你...
2022闺蜜文案短句 2022闺蜜文案短句2022闺蜜文案短句(精选68句) 1.不忘初心,方能始终。十年之约,四叶绽放,...
对联如何押韵 对联如何押韵对联如何押韵对联不用押韵。只要满足对联六相即可。六相中并无押韵要求。对联六相:字数相等,...
大象伯伯过生日,请来了狮子,小... 大象伯伯过生日,请来了狮子,小熊,小猫,大象会买什么招待大家大象伯伯会给狮子买牛奶(不能给他买肉 否...
谁知道有这样一本小说女主叫花未... 谁知道有这样一本小说女主叫花未央,男主姓帝女主是重生重生之前和男主有个儿子女主重生之前有个姓诸葛的纯...
花火中的小说念念不忘叫什么 花火中的小说念念不忘叫什么不就是念念不忘吗如若有你,一世欢喜?老婆大人有点冷诶,你说的是不是最新里的...
讲的就是女主是魔法师,穿越到古... 讲的就是女主是魔法师,穿越到古代成为不受宠的公主,和哥哥还有外公在外面生活,后来代替哥哥到邻国当人质...
无心法师为什么被禁播 无心法师为什么被禁播大概是因为涉及到妖魔鬼怪吧宣扬封建迷信吧。没有被禁播,还是可以看到的。《无心法师...
生孩子是艰辛的事吗? 生孩子是艰辛的事吗?我们经常会听到很多人都说女生生孩子是非常艰辛的事情。可能一开始大部分的女生没有经...