JAVA 单例模式的几种写法

本文详细介绍了单例模式的多种实现方式,包括饿汉式、懒汉式等多种变体,并重点推荐了静态内部类实现方式,该方式具备线程安全、懒加载及高效的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class Singleton {

    // 饿汉式 线程安全,类加载时就被初始化了 没有实现懒加载
    /*private Singleton() {}
    private static Singleton  instance = new Singleton();
    public static Singleton getInstance() {
        return  instance;
    }*/


    //  懒汉式一,线程不安全
    /*private Singleton (){}
    private static Singleton instance = null;
    public static Singleton getInstance (){
        if (null == instance) {
            instance = new Singleton();
        }
        return instance;
    }
     */

    // 懒汉式二,线程安全同步锁定方法,每次获取单例都要锁定整个方法
   /* private Singleton(){}
    private static Singleton instance = null;
    public synchronized  static Singleton getInstance () {
        if (null == instance) {
            instance = new Singleton();
        }
        return instance;
    }*/


    //  懒汉式三
    //同步代码块方式,线程安全,只在第一次获取单例时锁定了单例对象,高效
    /*private Singleton(){}
    private static  Singleton instance = null;
    public static Singleton getInstance() {
        if (null == instance) {
            synchronized (Singleton.class) {
                if (null == instance) {
                    instance = new Singleton();
                }
            }
        }
        return  instance;
    }*/

    /**
     * 静态内部类实现,  推荐
     * 线程安全,懒加载,效率高; 静态内部类的凡是在单例类在被JVM加载到内存时并不会立即实例化,而是在第一次调用
     *  getInstance()方法时才会将SingleTonInner类加载到内存,从而实例化SingleTonInner的静态属性
     * SINGLETON,才开始加载实例化SINGLETON。并且在实例化SINGLETON的时候,JVM帮助我们保证了线程的安全
     */
    private Singleton(){}
    public static Singleton getInstance (){
        return SingletonInner.INSTANCE;
    }
    private static class SingletonInner {
        private static final Singleton INSTANCE = new Singleton();
    }


    /**
     * 枚举类实现
     */
     /*private Singleton(){ }
     public static Singleton getInstance(){
         return  SinglteonEnum.INSTANCE.getInstanceEnum();
     }
     private enum SinglteonEnum {
         INSTANCE;
         private Singleton singlteon;
         SinglteonEnum() {
             singlteon = new Singleton();
         }
          private Singleton getInstanceEnum(){
             return singlteon;
          }
     }*/
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值