懒汉式:
不在类加载的时候创建对象,什么时候调用获取对象的方法,什么时候再返回该类的对象。节省空间。
为了防止多线程下创建该类的多个对象,要加锁。
我们采用的是双重检测锁:
package cn.liz.syn;
public class FullSingleTon {
//私有化构造器
private FullSingleTon(){
}
// 类初始化的时候不创建该类的对象
private static FullSingleTon full = null;
// 公共的获取类对象的方法
public static FullSingleTon getInstance(){
// 当该类的对象不存在的时候
if(full==null){
// 为了保证单例,加锁
synchronized(FullSingleTon.class){
// 双重检测
if(full==null){
full = new FullSingleTon();
}
}
}
return full;
}
}
测试:
总结:
双重检测锁如何保证单例的呢?
首先:
1.先进行一次判断,如果已经存在,那么直接返回这个对象,避免重复等待拿锁。
2.如果不存在,那么取得锁,这个时候为了防止网络延时,应该再次判断是否存在,避免重复创建锁。
下节我们讲一个更好的实现单例的方式--静态内部类。