单例模式的设计:
//懒汉式单例模式,在第一次调用时实例化 public class LazyHolder { public LazyHolder(){} private static LazyHolder lazyHolder=null; //方式一 //非线程安全,加上同步锁,但是每次都要同步,会影响性能 public static synchronized LazyHolder getLazyHolder(){ if (lazyHolder ==null){ lazyHolder=new LazyHolder(); } return lazyHolder; } //方式二 //做了两次null检查,确保了只有第一次调用单例的时候才会做同步,这样也是线程安全的,同时避免了每次都同步的性能损耗 public static LazyHolder getLazyHolder2(){ if (lazyHolder ==null){ synchronized (LazyHolder.class){ if (lazyHolder==null){ lazyHolder=new LazyHolder(); } } } return lazyHolder; } } //方式三 //实现了线程安全,同事避免了同步带来的性能影响 class LazyHolder2{ private static class Singleton{ private static final LazyHolder2 INSTANT = new LazyHolder2(); } private LazyHolder2(){ } public static final LazyHolder2 getLazy(){ return Singleton.INSTANT; } } //饿汉式单例 //饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,线程安全 class Singleton{ private Singleton(){} private static final Singleton singleton = new Singleton(); //静态工厂方法 public static Singleton getInstance(){ return singleton; } }