java.util.concurrent.locks.AbstractQueuedSynchronizer作为java并发库的核心构件,结合了多位大师的智慧,作者Doug Lea写道,Thanks xxxx, for helpful ideas, discussions, and critiques on the design of this class.
此类包含两种模式,独占模式和共享模式,处于独占模式下时,其他线程试图获取该锁将无法取得成功。在共享模式下,多个线程获取某个锁可能(但不是一定)会获得成功
独占模式下获取锁的方法为tryAcquire,此方法必须有子类实现,下图为并发库中此方法的具体实现类,可以看到锁ReentrantLock就是采用的独占模式
共享模式下获取锁的方法为tryAcquireShared,此方法同样必须有子类实现,下图为并发库中此方法的具体实现类,可以看到信号灯Semaphore就是采用的共享模式,结合上面可以看见读写锁ReentrantReadWriteLock两者皆用到了
公平性讲的是线程获取锁的方式是粗暴的直接抢占,还是排队获取
独占性讲的是某lock已经被其他线程占据后当前线程是否还可以去占有,比如信号灯当然就会用共享模式占有锁,而且可以看到java.util.concurrent.Semaphore.Sync.nonfairTryAcquireShared(int)实现,并不是只有一个线程可以成功获取锁,还剩余available个线程可以获取锁,而java.util.concurrent.locks.ReentrantLock.Sync.nonfairTryAcquire(int)会由于获取不到lock而被加入waiters且堵塞
分享到:
相关推荐
gamedev.net的文章,由高手翻译了,讲解DirectX中全屏与窗口的模式切换实现
Arm板由于资源有限,在运行QT界面程序时,如果是基于linaro界面,会出现花屏现象。解决方法可以将程序设置成独占模式,开机只启动对应的程序核界面。本文档,是对这一改变,对系统启动过程产生影响的解释。
主要为大家详细介绍了Java并发系列之AbstractQueuedSynchronizer源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
断屏幕的四角是否属于同一个窗口句柄,判断当前系统是否处于全屏独占的模式
将Log4net的配置配置到的独立文件中,非独占日志文件配置方式
59 对MySQL锁机制再深入一步,共享锁和独占锁到底是什么?l.pdf
一次只有一个线程可以占有写模式的读写锁, 但是可以有多个线程同时占有读模式的读写锁. 正是因为这个特性, 当读写锁是写加锁状态时, 在这个锁被解锁之前, 所有试图对这个锁加锁的线程都会被阻塞. 当读写锁在读加锁...
DS4帮助 帮助运行DS4Windows独占模式的简单脚本。 ( ) 它只是结束了所有已知的阻止DS4Windows使用独占模式的进程。
以下是对Sql server锁,独占锁,共享锁,更新锁,乐观锁,悲观锁进行了详细的介绍,需要的朋友可以过来参考下
行业-59 对MySQL锁机制再深入一步,共享锁和独占锁到底是什么?l.rar
试论独占加共享的频谱划分模式
解决VC++ 在多线程开发时,在对数据的操作中,操作次数太多,造成的速度下降的问题。本程序主要帮助实现对数据读写权限的管控,实现多线程时数据的安全性和数据隔离
C API fopen打开的文件无法以独占方式操作文件,此代码利用Windows API巧妙的解决了该问题
常用Sqlserver管理语句 1.调整内存 2.关闭启用xp_cmdshell 3.收缩数据库 4.还原数据库 5.创建赋权超级帐户 6.启动停止服务 7. 设置解除独占模式 8. 链接服务器 9. 查詢數據庫聯接數
1.此设计模拟满足设备独占性的独占设备的分配和回收。能够处理以下的情形: ⑴ 模拟设计的程序包括建立设备类表和设备表的程序段(在主函数中)、分配设备和回收设备的函数; ⑵ 分配设备要求输入作业名、设备类名...
清除 vss 独占工具 清除 vss 独占工具 清除 vss 独占工具
打开被独占文件的方法,是进行技术调研、文件解析的必备技术!
解决C语言 在多线程开发时,在对数据的操作中,操作次数太多,造成的速度下降的问题。本程序主要帮助实现对数据读写权限的管控,实现多线程时数据的安全性和数据隔离
独占设备的分配与回收,c++代码实现,有文档,操作系统设计。