确保一个特定的类只有一个对象被实例化。
Singleton:用于单线程应用程序
public class Singleton { private Singleton(){} //在自己内部定义自己一个实例,是不是很奇怪? //注意这是private 只供内部调用 private static Singleton instance = new Singleton(); //这里提供了一个供外部访问本class的静态方法,可以直接访问 public static Singleton getInstance() { return instance; } } |
Double-Checked Locking:用于多线程应用程序
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次 //使用时生成实例,提高了效率! if (instance==null) instance=new Singleton(); return instance; } } |
Double-Checked Locking在java实际上无法得到预期的效果,不能保证singleton的正确性。
参考:(英文)
http://gee.cs.oswego.edu/dl/cpj/jmm.htmlhttp://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
posted on 2006-07-18 10:56
保尔任 阅读(594)
评论(0) 编辑 收藏 所属分类:
Design Patten