单例设计模式的四种实现和各自的优缺点

it2022-05-05  101

一: 懒汉式

代码实现:

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

懒汉式优点: 使用时才会实例化, 不浪费内存空间, 无线程安全问题 懒汉式缺点: 使用同步锁, 效率低


二: 饿汉式

代码实现

public class HungryManSingleTon{ private HungryManSingleTon(){} private static HungryManSingleTon hmst = new HungryManSingleTon(); public static HungrtManSingleTon getInstance(){ return hmst; } }

**饿汉式优点: **不会出现线程安全问题 **饿汉式缺点: **在类加载时实例化, 需要额外占用内存空间


三: 静态内部类实现单例

代码实现

public class InnerClassSingleTon{ private InnerClassSingleTon(){} public static InnerClassSingleTon getInstance(){ return InnerClass.getInstance_in(); } static class InnerClass{ private static InnerClassSingleTon icst = new InnerClassSingleTon(); private static InnerClassSingleTon getInstance_in(){ return icst; } } }

**静态内部类实现单例的优点: **在调用内部类时才会实例化对象, 不占用额外内存, 线程安全, 效率高


四: 双重验证饿汉式

代码实现

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

最新回复(0)