探索Java同步机制 - 编程入门网
探索Java同步机制时间:2011-07-08 IBM 李三红本文将从两个方面进行阐述: 使用 C++ 语言来描述 Monitor Object 设计模式。Java 对于这样一个典型的 模式做了很好的语言层面的封装,因此对于 Java 的开发者来说,很多关于该模 式本身的东西被屏蔽掉了。本文试图使用 Native C++ 语言,帮助读者从本质上 对 Monitor object 设计模式有一个更全面的认识。 结合 C++ 版本的 Monitor Object 设计模式,引领读者对于 Java 同步机制 有一个更深刻的认识,帮助读者正确有效地使用 Java 同步机制。 预备知识 在开始正式讨论之前,需要了解一些预备知识。 什么是 RAII 资源获取即初始化(RAII, Resource Acquisition Is Initialization)是指 ,在一个对象的构造函数中获得资源 , 并且在该对象的析构函数中释放它。这个 资源可以是对象、内存、文件句柄或者其它类型。实现这种功能的类,我们就说 它采用了资源获取即初始化(RAII)的方式。 RAII 是一种很典型的语言惯用法 ,被很多的 OO 语言所使用,下面是 C++ 的例子。 清单 1. RAII Using C++
使用 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
探索Java同步机制(2)时间:2011-07-08 IBM 李三红什么是区域锁 (Scoped Lock) 区域锁是指线程执行进入一个区域时,一个锁将自动被获取,当该线程执行离 开这个区域时,这个锁将被自动释放。 C++ 区域锁的实现使用了 RAII 技术 , 实现如下。 清单 3. Scoped Lock Using C++
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |