单例模式:确保一个类只有一个实例,并提供一个全局访问点。单例模式的构造方法是私有的,所以不能从外部创建这个类,这样很自然想到定义静态方法返回这个类的实例的方式。
实现的方式:
1.线程同步方式:
public class Singleton { public static synchronized Singleton getInstance() { if (null == uniquesInstance) { uniquesInstance = new Singleton(); } return uniquesInstance; } private Singleton() {} private static Singleton uniquesInstance; }
2.加载时创建
public class Singleton { public static Singleton getInstance() { return uniquesInstance; } private Singleton() {} private static Singleton uniquesInstance = new Singleton(); }JVM在加载这个类时马上创建一个唯一的实例,JVM保证在任何线程访问uniqueInstance静态变量之前一定先创建此实例。
3.双重检查加锁的方式
public class Singleton { public static Singleton getInstance() { if (null == uniquesInstance) { synchronized (this) { if (null == uniquesInstance) { uniquesInstance = new Singleton(); } } } return uniquesInstance; } private Singleton() {} private volatile static Singleton uniquesInstance; }