标签:导致 instance 单例 内部类 情况下 == 效率 public 同步问题
第一种 懒汉式,线程不安全,无法在多线程工作
/** * 懒汉式,lazy loading明显,线程不安全,无法多线程使用 */ public class SinglePattern { private static SinglePattern singlePattern; public static SinglePattern getInstance() { if (singlePattern == null) { singlePattern = new SinglePattern(); } return singlePattern; } }
第二种 懒汉式,线程安全,但是锁的力度较大,易造成线程阻塞,导致效率低下
/** * 懒汉式,线程安全,多线程可使用,但锁的力度较大, * 易造成阻塞,效率低下 */ public class SinglePattern { private static SinglePattern singlePattern; public static synchronized SinglePattern getInstance() { if (singlePattern == null) { singlePattern = new SinglePattern(); } return singlePattern; } }
第三种,饿汉式,利用ClassLoder机制避免了多线程的同步问题,但是没有Lazy loading的效果
/** * 饿汉式,基于ClassLoader机制避免了多线程同步问题 * 但是未达到lazy loading的效果 */ public class SinglePattern { private static SinglePattern mSinglePattern = new SinglePattern(); private static SinglePattern getInstance() { return mSinglePattern; } }
第四种,饿汉式,和第三种无较大差别,在类初始化的时候实例化对象
public class SinglePattern { private static SinglePattern singlePattern; static { singlePattern = new SinglePattern(); } public static SinglePattern getInstance() { return singlePattern; } }
第五种,饿汉式,静态内部类形式,可以达到Lazy loading
/** * 饿汉式,静态内部类 * 这种方式同样利用Classloader机制,但是这种方式,可以避免在SinglePattern类加载的情况下,不被实例化 * 只有通过主动调用getInstance()方法的时候才会调用SinglePatternHolder初始化实例 * 可以达到Lazy loading */ public class SinglePattern { private static class SinglePatternHolder { private static SinglePattern singlePattern = new SinglePattern(); } public static SinglePattern getInstance() { return SinglePatternHolder.singlePattern; } }
第六种:双重校验锁 懒汉式,线程安全
/** * 懒汉式加强版,将Synchronized关键字放到getInstance方法里,同时mSinglePattern加了volatile关键字 * 既避免了多线程问题,又不降低效率 * 但是volatile关键字也有性能问题,不建议大量使用 */ public class SinglePattern { private volatile static SinglePattern mSinglePattern; public static SinglePattern getInstance() { if (mSinglePattern == null) { synchronized (SinglePattern.class) { if (mSinglePattern == null) { mSinglePattern = new SinglePattern(); } } } return mSinglePattern; } }
第七种,为枚举,
标签:导致 instance 单例 内部类 情况下 == 效率 public 同步问题
原文地址:https://www.cnblogs.com/nangongyibin/p/10447246.html