懒汉式

懒汉式:

不在类加载的时候创建对象,什么时候调用获取对象的方法,什么时候再返回该类的对象。节省空间。

为了防止多线程下创建该类的多个对象,要加锁。

我们采用的是双重检测锁:

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.如果不存在,那么取得锁,这个时候为了防止网络延时,应该再次判断是否存在,避免重复创建锁。

下节我们讲一个更好的实现单例的方式--静态内部类。


猜你喜欢

转载自blog.csdn.net/qq_28385797/article/details/72847347