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. 单例模式的主要内容,如果未能解决你的问题,请参考以下文章

单例模式 俗称单例3步曲+1曲

Java设计模式1.单例模式

单例模式

设计模式笔记-单例模式

设计模式笔记-单例模式

单例模式