单例模式 确保一个类只有一个实例,并提供一个全局访问点。
最简单的单例模式,不适用于多线程下使用
package demo; /** * 同步情况下使用, 多线程下可能会产生多个Singleton实例 * * @author wy * */ public class Singleton { private static Singleton singleton; private Singleton() { } public static Singleton getInstance() { if (singleton == null) { singleton = new Singleton(); } return singleton; } }
多线程下也可使用的单例模式:
package demo; /** * 保證了多线程下祇能产生一个Singleton实例 * * @author wy * */ public class NewSingleton { private static NewSingleton singleton = new NewSingleton(); private NewSingleton() { } public static NewSingleton getInstance() { return singleton; } }
package demo; /** * 双重检查加锁,防止多线程情况下产生多个Singleton */ import sun.security.jca.GetInstance; public class OtherSingleton { private volatile static OtherSingleton singleton; private OtherSingleton() { } public static OtherSingleton GetInstance() { if (singleton == null) { synchronized (OtherSingleton.class) { if (singleton == null) { singleton = new OtherSingleton(); } } } return singleton; } }