Java-单例设计模式(懒汉与饿汉)【JAVA基础】

单例设计模式
保证一个类在内存中只能有一个对象。
思路:
1)如果其他程序能够随意用 new 创建该类对象,那么就无法控制个数。因此,不让其他程序用 new 创建该类的对象。
2)既然不让其他程序 new 该类对象,那么该类在自己内部就要创建一个对象,否则该类就永远无法创建对象了。
3)该类将创建的对象对外(整个系统)提供,让其他程序获取并使用。
饿汉式:
一上来我就把对象给你 new 好了,你来了直接就可以拿去“吃”了

//饿汉式
class Single
{
	private static final Single s=new Single();
	private Single() {}
	public static Single getInstance()
	{
		return s;
	}
}

懒汉式
(要是有人问单例的延迟加载方式指的就是这种方式)
一开始我就不给你 new 对象,你来找我,我在给你创建一个对象

//懒汉式
class Single
{
	private static Single s=null;
	private Single() {}
	public static Single getInstance()
	{	
        if(s==null)
        s=new Single();		
		return s;
	}
}

懒汉式有一个缺点,就是在多线程中使用的时候,可能会创建多个实例对象,比如:
线程1来调用 getInstance() 方法,判断了 s=null,然后线程1由于未知的原因阻塞了,线程2再来调用 getInstance() 方法,判断s=null,线程2就创建了一个对象,这时候线程1又运行了,那么线程1就会创建一个对象,这样就会造成多个对象。
懒汉式的线程优化——加一个锁

//懒汉式
class Single
{
	private static Single s=null;
	private Single() {}
	public static Single getInstance()
	{
		if(s==null) //-----------------提高懒汉式的效率
		{
		    synchronized(Single.class) //---------提高懒汉式的安全性
		    {
		        if(s==null)
			       s=new Single();		
		     }
		}
		return s;
	}
}
原创文章 27 获赞 2 访问量 1139

猜你喜欢

转载自blog.csdn.net/liudachu/article/details/105447349