Java Monitor Pattern设计模式.docVIP

  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 Monitor Pattern设计模式

Java Monitor Pattern 本文从典型的 Monitor Object 设计模式入手,从一个新的视角,来探讨 Java 语言的同步机制. 本文将从两个方面进行阐述: 1、使用 C 语言来描述 Monitor Object 设计模式.Java 对于这样一个典型的模式做了很好的语言层面的封装,因此对于 Java 的开发者来说,很多关于该模式本身的东西被屏蔽掉了.本文试图使用 Native C 语言,帮助读者从本质上对 Monitor object 设计模式有一个更全面的认识. 2、结合 C 版本的 Monitor Object 设计模式,引领读者对于 Java 同步机制有一个更深刻的认识,帮助读者正确有效地使用 Java 同步机制. 预备知识 在开始正式讨论之前,需要了解一些预备知识. 什么是 RAII 资源获取即初始化(RAII, Resource Acquisition Is Initialization)是指,在一个对象的构造函数中获得资源 , 并且在该对象的析构函数中释放它.这个资源可以是对象、内存、文件句柄或者其它类型.实现这种功能的类,我们就说它采用了资源获取即初始化(RAII)的方式. RAII 是一种很典型的语言惯用法,被很多的 OO 语言所使用,下面是 C 的例子. 清单 1. RAII Using C class Raii { public: // Store a pointer to the resource and initialize the resource. Raii(Resource resource) :m_pRes (resource){ m_pRes-initialize (); } // Close the resource when the execution goes out of scope. virtual ~Raii() { m_pRes-close (); } private: // Pointer to the resource were managing. Resource *m_pRes; // ... maybe need disallow copying and assignment ... }; 使用 RAII 的好处是:析构函数由系统自动调用,这样可以帮助我们自动地隐式释放我们所获取的资源.事情上,我们熟知的很多C技术都用到了这一设计模式,比如:智能指针 (Smart Pointer),以及我们接下来要讨论的范围锁 (Scoped Lock) . 不同于 C ,Java 对象没有析构函数,Java System 提供了 GC 来管理内存资源.而对于像数据库连接,Sockets 这样类型的资源, Java 提供了 finalize() 来处理.但是,请注意,Java 的 finalizer 与 C 的析构函数是不同的,finalize() 函数由 GC 异步地在某个恰当的时候调用,我们不能等同地使用 finalize() 来实现 C 里的 RAII .通常的做法是使用 Java 提供的 finally 语句块. 清单 2. RAII Using Java MyResource res = null; try{ res = new MyResource(); // Use the resource } finally { //At exit point, close the resource. if (res != null) { res.close(); } } 什么是区域锁 (Scoped Lock) 区域锁是指线程执行进入一个区域时,一个锁将自动被获取,当该线程执行离开这个区域时,这个锁将被自动释放. C 区域锁的实现使用了 RAII 技术 , 实现如下. 清单 3. Scoped Lock Using C template class LOCK class Guard { public: // Store a pointer to the lock and acquire the lock. Guard (LOCK lock) :m_pLlock (lock), m_bOwner (false) { m_pLlock-

文档评论(0)

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

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

1亿VIP精品文档

相关文档