单件模式确保一个类只有一个实例,并提供一个全局访问点。
以下为使用“双重检查加锁“,在getInstance()中减少使用同步的单件模式代码
public class Singleton()
{
//构造器声明为私有的,只有自Singleton类内才可以调用构造器
private Singleton() {}
//用静态方法实例化对象,并返回这个实例对象
public static Singleton getInstance() {
if(uniqueInstance == null)
{ /*只有当我们第一次需要这个实例时,才会执行
if语句块中的语句,这就是“延迟实例化”(lazy instantiaze) */
synchronized(Singleton.class)
{
//同步后,再检查一遍,如果仍是null,才初始化
if (uniqueInstance == null)
{
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
//其他方法
//静态变量来记录Singleton类的唯一实例
/*volatile关键词确保:当uniqueInstance变量被初始化成
Singleton实例时,多个线程正确地处理uniqueInstance变量 */
private volatile static Singleton uniqueInstance;
//其他变量
}