博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Java并发编程实战》第十三章 显示锁 读书笔记
阅读量:6708 次
发布时间:2019-06-25

本文共 1323 字,大约阅读时间需要 4 分钟。


一、Lock与 ReentrantLock

Lock 提供一种无条件的、可轮询的、定时的、可中断的锁获取操作,全部加锁和解锁的方法都是显式的。
public interface Lock {       void lock(); // 获取锁。       void lockInterruptibly() throws InterruptedException; // 假设当前线程未被中断,则获取锁。       boolean tryLock(); // 仅在调用时锁为空暇状态才获取该锁。       // 假设锁在给定的等待时间内空暇,而且当前线程未被中断,则获取锁。       boolean tryLock( long time, TimeUnit unit) throws InterruptedException;       void unlock(); // 释放锁。      Condition newCondition(); // 返回绑定到此 Lock 实例的新 Condition 实例。}
Lock lock = new ReentrantLock();lock.lock();try {       // 更新对象状态       // 捕获异常,并在必要时恢复不变性条件} finally{      lock.unlock();}
1 轮询锁与定时锁
通过tryLock来避免锁顺序死锁
2 可中断的锁获取操作
public boolean sendOnSharedLine(String message) throws InterruptedException {      lock.lockInterruptibly();       try {             return cancellableSendOnSharedLine(message);      } finally {            lock.unlock();      }}private boolean cancellableSendOnSharedLine(String message) throws InterruptedException {}
3 非块结构的加锁

二、性能考虑因素

ReentrantLock在Java 5.0比内置锁提供更好的竞争性能。
Java 6使用了改进后的算法来管理内置锁,与在ReentrantLock中使用的算法类似,该算法有效地提高了可伸缩性。

三、公平性

ReentrantLock的构造函数提供两种公平性选择:非公平锁、公平锁。
针对Map的性能測试,公平锁、非公平锁、ConcurrentHashMap。

四、在synchronized和ReentrantLock之间进行选择

在一些内置锁无法满足需求的情况下,ReentrantLock能够作为一种高级工具。当须要一些高级功能时才应该使用ReentrantLock,这些功能包含:可定时的,可轮询的与可中断的锁获取操作,公平队列,及非块结构的锁。否则,还是应该优先使用synchronized.
五、读-写锁

转载地址:http://ykilo.baihongyu.com/

你可能感兴趣的文章
NSDate格式化小例
查看>>
运维不容错过的4个关键指标!
查看>>
spring 基础
查看>>
商品详情页上拉查看详情
查看>>
Kubernetes DNS服务简介
查看>>
windbg调试堆破坏
查看>>
How to Install CMS Made Simple v2.2 on LAMP in CentOS 7.2
查看>>
新IT铺路 智慧出行时代来了!
查看>>
虚拟机上keepalived实验笔记
查看>>
ElasticSearch(java) 创建索引
查看>>
手把手教你在多种无监督聚类算法实现Python(附代码)
查看>>
第4章 Keras入门
查看>>
手工修复ie浏览器
查看>>
BATJ互掐,哪家AI公司首先达到万亿美元市值? | 新智元AI技术峰会论坛
查看>>
hdu 1232 畅通工程 (并查集)
查看>>
MySql的用户权限
查看>>
java中finally和return的执行顺序
查看>>
Hibernate5-一对多双向关联-左外连接-HQL
查看>>
H3C防火墙出厂空配置管理口无法WEB登录
查看>>
使用NetWeaver创建数据库连接
查看>>