1. 单例模式
Posted lovezmc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1. 单例模式相关的知识,希望对你有一定的参考价值。
-
单例模式存在的意义
1. 一个class只有一个对象,减少了内存开支
2. 避免对资源多重占用
-
适用于单例模式的场景
1. 频繁创建及销毁的对象,例如工具类 2. 不变的对象 3. 重量级对象,例如JDBC连接,httpClient等
-
单例模式的使用
1. 饿汉式
/** * 恶汉式 * 优点:类加载时就完成了实例化,避免了线程同步问题。 * 缺点:static一直强引用这对象,直至类被销毁对象才会被销毁。可能造成内存浪费 */ public class Singleton private final static Singleton INSTANCE = new Singleton(); private Singleton() public static Singleton getInstance() return INSTANCE;
2. 饿汉式(双重检查)
/** * 懒汉式(双重检查) * 优点:线程安全,延迟加载,效率较高 */ public class Singleton private static volatile Singleton singleton; private Singleton() public static Singleton getInstance() if (singleton == null) synchronized (Singleton.class) if (singleton == null) singleton = new Singleton(); return singleton;
3. 懒汉式
/** * 静态内部类 * 原理:采用类加载的机制保证实例化的线程安全。当需要对象时,调用 getInstance 方法时才会加载 SingletonInstnce 类,完成实例化。 * 优点:线程安全,延迟加载 */ public class Singleton private Singleton() private static class SingletonInstance private static final Singleton INSTANCE = new Singleton(); public static Singleton getInstance() return SingletonInstance.INSTANCE;
4. 枚举
/** * 枚举 * 原理:借用枚举来实现单例,不仅能避免线程问题,还能防止反序列化重新创建新的对象。 */ public enum Singleton INSTANCE; public void whateverMethod()
以上是关于1. 单例模式的主要内容,如果未能解决你的问题,请参考以下文章