Java并发编程之Lock接口详解及应用.pdfVIP

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

java.util.concurrent.locks

接口Lock

所有已知实现类:

ReentrantLock,ReentrantReadWriteLock.ReadLock,

ReentrantReadWriteLock.WriteLock

publicinterfaceLock

Lock实现了比使用synchronized方法和语句可获得的更广泛的锁定操作。

此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关的

Condition对象。

锁是控制多个线程对共享资源进行的工具。通常,锁了对共享资源的独

占。一次只能有一个线程获得锁,对共享资源的所有都需要首先获得锁。不

过,某些锁可能允许对共享资源并发,如ReadWriteLock的锁。

synchronized方法或语句的使用了对与每个对象相关的隐式监视器锁的访

问,但却强制所有锁获取和释放均要出现在一个块结构中:当获取了多个锁时,

它们必须以相反的顺序释放,且必须在与所有锁被获取时相同的词法范围内释放所

有锁。

虽然synchronized方法和语句的范围机制使得使用监视器锁编程方便了很多,

而且还帮助避免了很多涉及到锁的常见编程错误,但有时也需要以更为灵活的方式

使用锁。例如,某些遍历并发的数据结果的算法要求使用

hand-over-hand或chainlocking:获取节点A的锁,然后再获取节点B

的锁,然后释放A并获取C,然后释放B并获取D,依此类推。Lock接口的

实现允许锁在不同的作用范围内获取和释放,并允许以任何顺序获取和释放多个

锁,从而支持使用这种技术。

随着灵活性的增加,也带来了的责任。不使用块结构锁就失去了使用

synchronized方法和语句时会出现的锁自动释放功能。在大多数情况下,应该

使用以下语句:

Lockl=...;

l.lock();

try{

//accesstheresourceprotectedbythislock

}finally{

l.unlock();

}

锁定和取消锁定出现在不同作用范围中时,必须谨慎地确保保持锁定时所执行的

所有代码用try-finally或try-catch加以保护,以确保在必要时释放锁。

Lock实现了使用synchronized方法和语句所没有的其他功能,包括

了一个非块结构的获取锁尝试(tryLock())、一个获取可中断锁的尝试

(lockInterruptibly())和一个获取超时失效锁的尝试(tryLock(long,

TimeUnit))。

Lock类还可以与隐式监视器锁完全不同的行为和语义,如保证排序、非重

入用法或死锁检测。如果某个实现了这样特殊的语义,则该实现必须对这些

语义加以记录。

注意,Lock实例只是普通的对象,其本身可以在synchronized语句中作为目

标使用。获取Lock实例的监视器锁与调用该实例的任何lock()方法没有特别

的关系。为了避免,建议除了在其自身的实现中之外,决不要以这种方式使

用Lock实例。

除非另有说明,否则为任何参数传递null值都将导致抛出

NullPointerException。

内存同步

所有Lock实现都必须实施与内置监视器锁的相同内存同步语义,如The

JavaLanguageSpecification,ThirdEdition(17.4MemoryModel)中所描

述的:

•成功的lock操作与成功的Lock操作具有同样的内存同步效应。

•成功的unlock操作与成功的Unlock操作具有同样的内存同步效应。

不成功的锁定与取消锁定操作以及重入锁定/取消锁定操作都不需要任何内存同

步效果。

实现注意事项

三种形式的锁获取(可中断、不可中断和定时)在其性能特征、排序保证或其他

实现质量上可能会有所不同。而且,对于给定的Lock类,可能没有中断正在进

行的锁获取的能力。因此,并不要求实现为所有三种形式的锁获取定义相同的

保证或语义,也不要求其支持中断正在进行的锁获取。实现必需清楚地对每个锁

定方法所的语义和保证进行记录。还必须遵守此接口中定义的中断语义,以

便为锁获取中断支持:完全支持中断,或仅在进入方法时

文档评论(0)

183****7931 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档