设计模式——单例模式

本文详细介绍了Java中的单例模式实现方式,包括懒汉式、饿汉式以及线程安全的双重校验锁模式。讨论了它们各自的优缺点,如懒汉式的线程不安全性、饿汉式的资源浪费以及双重校验锁的线程安全与性能平衡。通过对单例模式的深入理解,有助于开发者在实际项目中选择合适的实现策略。

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

单例模式:

懒汉式—线程不安全:

public class Singleton{
    private static Singleton Instance;

    private Singleton(){
      
    }

    public static Singleton GetInstance(){
        if(Instance==null){
            Instance=new Singleton();
        }
        return Instance;
    }
}

优点:

私有静态类变量uniqueInstance被延迟实例化,这样做的好处是如果没有用到该类,那么就不会实例化uniqueInstance从而节约资源。

缺点:

线程不安全,多线程情况下会多次创建实例。

饿汉式—线程安全:
 

public class Singleton{
    private static Singleton Instance=new Singleton();
    
    private Singleton(){

    }

    public static Singleton GetInstance(){
        return Instance;
    }
}

优点:

采取直接实例化uniqueInstance的方式就不会产生线程不安全问题。

缺点:

直接实例化的方式也丢失了延迟实例化带来的节约资源的好处。

懒汉式—线程安全:

private static Singleton Instance;

public static synchronized Singleton getInstance(){
    if(Instance==null){
        Instance=new Singleton();
    }
    return Instance;
}

双重校验锁—线程安全:

public class Singleton{
    private volatile static Singleton Instance;
    
    private Singleton(){
    
    }

    public static Singleton getInstance(){
        if(Instance==null){//先判断实例是否存在,不存在再加锁
            synchronized(Singleton.class){//由于Instace实例有没有被创建过实例不知道,只能对其clss加锁

                if(Instance==null){//当多个线程的时候,只有一个进入,避免多次创建对象!
                    Instance=new Singleton();
                }
            }
        }
        return Instance;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值