单例模式

来源:互联网 发布:电信宽带软件 编辑:程序博客网 时间:2024/05/21 15:39

什么是单例模式?

单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象,一个

最好的办法是,让类自身负责保存它的唯一实例。这个类可以保证没有其它实例可以被创建,并且它可以提供一个访问该实例的方法。

单例模式解决了什么问题?

1.全局访问:外界不能通过new来实例化该变量,但是我们又要提供一个方法使得外界可以得到该实例;

2.实例化控制:实例化仅由该类自己控制,而不需要调用这个类的那部分控制;

简单来说就是对唯一实例的受控访问。

饿汉模式

public class Singleton {private Singleton(){}private static final Singleton instance = new Singleton();public static Singleton getInstance(){return instance;}}

懒汉模式

public class Singleton {private Singleton(){}private static Singleton instance = null;public synchronized static Singleton getInstance(){if(instance == null)instance = new Singleton();return instance;}}

双重锁定(Double-Check Locking)

public class Singleton {private Singleton(){}private static Singleton instance = null;public static Singleton getInstance(){if(instance == null){synchronized (Singleton.class) {if(instance == null)instance = new Singleton();}}return instance;}}

当两个线程同时进入getInstance时,如果instance为null,那么由于锁机制,两个线程只有一个进入,另一个在外边排队等候,必须其中一个进入并出来后,另一个才能进入。

如果没有第二层的判断,那么最后就会创建两个实例。