单件模式
在开发的过程中,有些时候只需要一个对象,如缓存,对话框,注册表,数据库连接或线程池等对象,为了确保在整个应用程序中能够保证该对象是唯一的,引入了单件模式。
单件模式,确保一个类只有一个实例,并提供一个全局访问点。
单件模式的一般组成:
1)定义一个该类的private static变量,确保是创建一次
2)设置其无参构造器为private
3)提供一个全局访问点,即public static 返回该类的实例化。
这种常规的做法,在单线程中可以使用,但是对于多线程就有可能会使类有多个对象了。 3 “双重检查枷锁”,在getInstance中减少使用同步。首先检查是否创建了实例,如果尚未创建,才进行同步,在同步内再次检查是否创建。这种可以减少同步等待的时间。
package com.whut.singleton;
public class SingletonObject {
private volatile static SingletonObject singleObject;
private SingletonObject(){}
public static synchronized SingletonObject getInstance()
{
if(singleObject==null)
{
synchronized(SingletonObject.class)
{
if(singleObject==null)
{
singleObject=new SingletonObject();
}
}
}
return singleObject;
}
}
public class SingletonObject {
private volatile static SingletonObject singleObject;
private SingletonObject(){}
public static synchronized SingletonObject getInstance()
{
if(singleObject==null)
{
synchronized(SingletonObject.class)
{
if(singleObject==null)
{
singleObject=new SingletonObject();
}
}
}
return singleObject;
}
}
不能继承单件类,因为单件类的构造器是私有的,而继承后的子类均需要调用该构造器,可是该构造器是私有的,则就不能继承,一旦改了构造器访问域,则就会使单件类受到破坏。
本文转自 zhao_xiao_long 51CTO博客,原文链接:http://blog.51cto.com/computerdragon/1155669