Java并发编程规则:设计线程安全的类.docVIP

Java并发编程规则:设计线程安全的类.doc

  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并发编程规则:设计线程安全的类

Java并发编程规则:设计线程安全的类 封装设计: 尽管所有的状态都存储在公共静态变量(域)中,仍然能写出线程安全的程序,但比起那些适当封装的类来说,我们难以验证这种程序的线程安全性,也很难再修改它的同步不破坏它的线程安全性。在没有进行全局检查的情况下,封装能够保证线程的安全性。 =====设计线程安全类的过程应该包括下面3个基本要素:======== 1、确定对象状态是由哪些变量组成的; 2、确定限制状态变量的不变约束; 3、制定一个管理并发访问对象状态的策略。 同步策略方式: 对状态使用同步策略,以维护其不变约束。需要明确的是同步的需求是什么,并分析其不可变约束和后验条件。 [java] view plain copy print?在CODE上查看代码片派生到我的代码片 package net.jcip.examples; import net.jcip.annotations.*; /** * Counter * p/ * Simple thread-safe counter using the Java monitor pattern * * @author Brian Goetz and Tim Peierls */ @ThreadSafe public final class Counter { @GuardedBy(this) private long value = 0; public synchronized long getValue() { return value; } public synchronized long increment() { if (value == Long.MAX_VALUE) throw new IllegalStateException(counter overflow); return ++value; } } 注:不理解对象的不可变约束和后验条件,就不能保证线程的安全性。要约束状态变量的有效值或者状态转换,就需要原子性与封装性。 实例限制: 限制性使构造线程安全的类更容易。因为类的状态被限制后,分析它的线程安全性时,就不必检查完整的程序。 将数据封装在实体内部,把对数据的访问限制在对象的方法上,更易确保线程在访问数据时总能获得正确的锁。示例如下: [java] view plain copy print?在CODE上查看代码片派生到我的代码片 package net.jcip.examples; import java.util.*; import net.jcip.annotations.*; /** * PersonSet * p/ * Using confinement to ensure thread safety * * @author Brian Goetz and Tim Peierls */ @ThreadSafe public class PersonSet { @GuardedBy(this) private final SetPerson mySet = new HashSetPerson(); public synchronized void addPerson(Person p) { mySet.add(p); } public synchronized boolean containsPerson(Person p) { return mySet.contains(p); } interface Person { } } HashSet是一个线程安全的类,通过公开的方法进行同步读写操作,确保了线程的安全性。 Java监视器模式: 像Vector和HashTable这样的核心库类,都是采用了Java监视器模式,其最大优势在于简单。Java监视器模式仅仅是一种习惯约定:任意锁对象只要始终如一地使用,都可以用来保护对象的状态。来看个私有锁保护状态的示例: [java] view plain copy print?在CODE上查看代码片派生到我的代码片 package net.jcip.examples; import net.jcip.annotations.*; /** * PrivateLo

文档评论(0)

jiupshaieuk12 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档