懒汉式的特点在于延迟加载对象,
但是懒汉式的延迟加载会造成线程安全问题,
因此需要同步(即加锁),
同步可以用同步代码块和同步函数,
但是同步后会造成低效,因此需要双重判断。即
package javaTest.xiancheng.Test;
/*
* 单例设计模式之懒汉设计模式
*/
public class Single {
//创建空构造函数,防止外部创建对象
Single(){}
//创建Single类引用s为空
private static Single s=null;
//创建获取Single类型对象引用的方法
public static Single getInstance(){
//如果s==null则进一步判断同步锁
if(s==null){
//判断同步锁,若同步锁允许进入,则继续判断s是否为null
synchronized (Single.class) {
//s==null则创建对象
if(s==null){
s=new Single();
}
}
}
return s;
}
}
---------------------------------------------------------
package javaTest.xiancheng.Test;
/*
* Single类的测试类
*/
public class TestSingle {
public static void main(String[] args) {
Single s1=Single.getInstance();
Single s2=Single.getInstance();
//同一对象
System.out.println(s2.equals(s1));
}
}