版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文格式为Word版,下载可任意编辑——java并发编程参考java并发编程参考
在Java5.0之前,只有synchronized内置锁和volatile.Java5.0后引入了显示锁ReentrantLock.
ReentrantLock概况
ReentrantLock是可重入的锁,它不同于内置锁,它在每次使用都需要显示的加锁和解锁,而且供给了更高级的特性:公允锁,定时锁,有条件锁,可轮询锁,可中断锁.可以有效制止死锁的活跃性问题.ReentrantLock实现了
Lock接口:
复制代码代码如下:
publicinterfaceLock
//阻塞直到获得锁或者中断
voidlock;
//阻塞直到获得锁或者中断抛奇怪
voidlockInterruptiblythrowsInterruptedException;
//只有锁可用时才获得,否那么直接返回
booleantryLock;
//只有锁在指定时间内可用时才获得,否那么直接返回,中断时抛奇怪
booleantryLocklongtime,TimeUnitunitthrowsInterruptedException;
voidunlock;
//返回一个绑定在这个锁上的条件
ConditionnewCondition;
Lock使用
复制代码代码如下:
Locklock=newReentrantLock;
lock.lock;
try
//更新对象状态
finally
//这里留神,确定要有finally代码块去解锁
//否那么轻易造成死锁等活跃性问题
lock.unlock;
ReentrantLock特性
轮询锁的和定时锁
可轮询和可定时的锁苦求是通过tryLock方法实现的,和无条件获取锁不一样.ReentrantLock可以有生动的容错机制.死锁的好多处境是由于依次锁引起的,不同线程在试图获得锁的时候阻塞,并且不释放自己已经持有的锁,结果造成死锁.tryLock方法在试图获得锁的时候,假设该锁已经被其它线程持有,那么按照设置方式马上返回,而不是一向阻塞等下去,同时在返回后释放自己持有的锁.可以根据返回的结果举行重试或者取消,进而制止死锁的发生.
公允性
ReentrantLock构造函数中供给公允性锁和非公允锁(默认)两种选择。所谓公允锁,线程将按照他们发出苦求的依次来获取锁,不允许插队;但在非公允锁上,那么允许插队:当一个线程发生获取锁的.苦求的时刻,假设这个锁是可用的,那这个线程将跳过所在队列里等待线程并获得锁。我们一般梦想全体锁是非公允的。由于当执行加锁操作时,公允性将讲由于线程挂起和恢复线程时开销而极大的降低性能。考虑这么一种处境:A线程持有锁,B线程苦求这个锁,因此B线程被挂起;A线程释放这个锁时,B线程将被唤醒,因此再次尝试获取锁;与此同时,C线程也苦求获取这个锁,那么C线程很可能在B线程被完全唤醒之前获得、使用以及释放这个锁。这是种双赢的局面,B获取锁的时刻(B被唤醒后才能获取锁)并没有推迟,C更早地获取了锁,并且吞吐量也获得了提高。在大多数处境下,非公允锁的性能要高于公允锁的性能。
可中断获锁获取操作
lockInterruptibly方法能够在获取锁的同时保持对中断的响应,因此无需创造其它类型的不成中断阻塞操作。
读写锁ReadWriteLock
ReentrantLock是一种标准的互斥锁,每次最多只有一个线程能持有锁。读写锁不一样,暴露了两个Lock对象,其中一个用于读操作,而另外一个用于写操作。
复制代码代码如下:
publicinterfaceReadWriteLock
/**
*Returnsthelockusedforreading.
*
*@returnthelockusedforreading.
*/
LockreadLock;
/**
*Returnsthelockusedforwriting.
*
*@returnthelockusedforwriting.
*/
LockwriteLock;
可选择实现:
1.释放优先
2.读线程插队
3.重入性
4.降级
5.升级
ReentrantReadWriteLock实现了ReadWriteLock接口,构造器供给了公允锁和非公允锁两种创造方式。读写锁适用于读多写少的处境,可以实现更好的并发性。
例如
复制代码代码如下:
publicclassReadWriteMap
privateMapmap;
privatefinalReadWriteLocklock=newReentrantReadWriteLock;
privatefinalLockreadLock=lock.readLock;
privatefinalLockwriteLock=lock.writeLock;
publicReadWriteMapMapmap
this.map=map;
publicVgetKkey
readLock.lock;
try
returnmap.getkey;
finally
readLock.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 17980.2-2026农药田间药效试验准则第2部分:杀虫剂防治稻纵卷叶螟
- 低血糖的康复训练
- 爱国卫生工作实施方案
- 高纯石墨硬毡及多孔石墨项目(一期)环境影响报告表
- 哈密土屋铜矿采矿改扩建工程环境影响报告书
- 北京师范大附属实验中学2026届初三5月单元检测试题英语试题含解析
- 山东省聊城阳谷县联考2026年中考冲刺七英语试题含解析
- 山东滕州2026届初三第二次质量调研(二模)物理试题含解析
- 安徽省巢湖市2026年初三月考试卷(三)英语试题含解析
- 浙江省宁波市海曙区三校联考2026届初三下学期第一次教学诊断英语试题含解析
- 2025年陕西榆能化学材料公司招聘笔试参考题库含答案解析
- 武汉市2024年九年级四月调考数学试卷及答案
- DZ/T 0452.2-2023 稀土矿石化学分析方法 第2部分:铝、铁、钙、镁、钾、钠、钛、锰、磷及15个稀土元素含量测定 混合酸分解―电感耦合等离子体原子发射光谱法(正式版)
- 四川省雅安市2024年九年级中考一诊历史试卷
- 蜱虫病知识讲座
- (完整版)阀门流程工艺
- 腰椎间盘脱出伴坐骨神经痛的护理查房
- ATS子系统HMI工作站操作手册
- 年残疾人就业保障金相关政策精讲
- 达芬奇油画解读
- 环境微生物学课件 02第二章原核生物
评论
0/150
提交评论