从ReentrantLock的实现看AQS的原理及应用
作者:李卓链接:https://tech.meituan.com/2019/12/05/aqs-theory-and-apply.html来源:美团技术团队著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
前言Java中的大部分同步类(Lock、Semaphore、ReentrantLock等)都是基于AbstractQueuedSynchronizer(简称为AQS)实现的。AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架。本文会从应用层逐渐深入到原理层,并通过ReentrantLock的基本特性和ReentrantLock与AQS的关联,来深入解读AQS相关独占锁的知识点,同时采取问答的模式来帮助大家理解AQS。由于篇幅原因,本篇文章主要阐述AQS中独占锁的逻辑和Sync Queue,不讲述包含共享锁和Condition Queue的部分(本篇文章核心为AQS原理剖析,只是简单介绍了ReentrantLock,感兴趣同学可以阅读一下ReentrantLock的源码)。
下面列出本篇文章的大纲和思路,以便于大家更好地理解:
1 ...
不可不说的Java“锁”事
作者:家琪链接:https://tech.meituan.com/2018/11/15/java-lock.html来源:美团技术团队著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
前言Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8和Netty 3.10.6)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。
Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文内容的总体分类目录:
1. 乐观锁 VS 悲观锁乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Java和数据库中都有此概念对应的实际应用。
先说概念。对于同一个数据的并发操作,悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。Java中,synchronized关键字和Lock的实现类都是悲观锁。
而乐观锁认为自己在使用 ...
Tue Dec 26 2023 00:00:00 GMT+0000 (Coordinated Universal Time)
阳光透过窗户轻轻的撒了进来,柔柔的在地板上铺展开来。早晨的光亮还没有那么强烈,屋内未被撑满,灰暗还留有一丝余息,在等待着最后的审判。
其实,阳光猛烈时,屋内也会留有黑暗的角落,在蓄势待发,等待着夕阳余晖落下时,吹起号角后的反击。
四周的墙壁,加上厚压压的屋顶,只在床头边裁剪了一处1平米的豁口,以供喘息。小小的窗口也不负众望,担起了重责,让室内唤起了一丝丝生机,足以寥慰居住在此的生灵。
又是急促的一个早晨,睁开双眼的时候,看了一眼枕头旁边的手机,已经过了8点钟,早起的计划又一次泡汤。虽然如此了,但还是在床上闭目养神了一会,8点15分,才慢悠悠的起身。已经习惯了晚起的节奏,对于上班时间的把控也越发的精确,心里信心满满,对时间的排班一点也不着急。
花花在床边已经踱步了好久,在我还在睡梦中,哒哒声就已经悄然袭击了我,仿佛是有节奏的在拍打着我,代替了闹钟提醒我起床,可朦朦睡意的大脑终究有自己的个性,待到困意疲倦、清醒充足时才娓娓睁开了双眼让我醒来。
花花变的很是急迫,哒哒声密集了很多,那一扇屋门格挡了她的去处,如若不然,她定要冲向外面,好肆意的挥洒她的力气,欣然的呼吸着自然的气息,这是她一直所向 ...