网站大量收购闲置独家精品文档,联系QQ:2885784924

Java AQS和JUC核心技术解析.pdfVIP

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

【讲义】第讲:AQS和JUC

⼀、ReentrantLock重⼊锁

.概述

.中断响应lockInterruptibly()

.锁申请等待限时tryLock(longtime,TimeUnitunit)

.公平锁和⾮公平锁

.AQS源码解析

⼆、Condition重⼊锁的搭配类

三、Semaphore信号量

四、ReadWriteLock读写锁

五、CountDownLatch倒计时器

六、CyclicBarrier循环栅栏

七、LockSupport线程阻塞⼯具类

⼀、ReentrantLock重⼊锁

1.1概述

●重⼊锁可以完全替代synchronized关键字。在JDK5.0的早期版本中,重⼊锁的性能远远好于

synchronized,但从JDK6.0开始,JDK在synchronized上做了⼤量的优化,使得两者的性能差距并

不⼤。重⼊锁对逻辑控制的灵活性要远远好于synchronized。

●重⼊锁常⽤⽅法

voidlock():获得锁,如果锁已经被占⽤,则等待。

voidlockInterruptibly():获得锁,但优先响应中断。

booleantryLock():尝试获得锁,如果成功,返回true;如果失败则返回false;获得不到锁,则不进

⾏等待,⽴即返回。

booleantryLock(longtime,TimeUnitunit):在给定时间内尝试获得锁。

booleanisHeldByCurrentThread():判断担⼼线程是否持有锁。

voidunlock():释放锁。

●下⾯是使⽤重⼊锁的简单示例:

1

●之所以称之为重⼊锁,就是⼀个线程允许反复进⼊。当然,这⾥的反复仅仅局限于⼀个线程;如

果同⼀个线程多次获锁,那么在释放锁的时候,也必须释放相同次数。如果释放锁的次数多,那么

会得到⼀个java.lang.IllegalMonitorStateException异常,反之,如果释放锁的次数少,那么相当

于线程还持有这个锁。如下所示:

2

1.2中断响应lockInterruptibly()

●如果使⽤synchronized,要么获得锁,要么保持等待。⽽如果使⽤了重⼊锁,则提供了另⼀种可

能,那就是线程可以被中断。也就是在等待锁的过程中,程序可以根据需要取消对锁的请求。即:

如果⼀个线程正在等待锁,那么它依然可以收到⼀个通知,被告知⽆须再等待,可以停⽌⼯作了。

可以很好的应对死锁问题。示例如下所示:

3

4

1.3锁申请等待限时tryLock(longtime,TimeUnitunit)

●除了等待外部通知之外,要避免死锁还有另外⼀种⽅式,就是限时等待。以下⾯为例,线程尝试

获得锁,如果没有获得锁,则等待5秒钟。如果5秒钟之后依然没有获得锁,则返回false,表示获得

锁失败。

●tryLock()⽅法也可以不带参数直接运⾏。在这种情况下,当前线程会尝试获得锁,如果锁并未被其

他线程占⽤,则申请锁会成功,并⽴即返回true。如果锁被其他线程占⽤,则当前线程不会进

⾏等待,⽽是⽴即返回false。这种模式不会引起线程等待,因此也不会产⽣死锁。

5

1.4公平锁和⾮公平锁

●在⼤多数情况下,锁的申请都是⾮公平锁。系统只是会从这个锁的等待线程中随机选择⼀个。类似

⼤家买票不去排队,乱哄哄的围在售票窗⼝前,售票员忙得焦头烂额,也顾不及谁先谁后,随便找

⼀个⼈出票就完事⼉了。

文档评论(0)

135****3697 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档