单例模式

在应用程序的生命周期中,对象只有一个实例的时候,就会使用单例设计模式。单例类总是在第一次被访问的时候完成实例化,直至应用程序退出之前都会使用同一个实例

在单例模式定义的过程中,需要注意两点:

(1)该类允许存在一个实例

(2)需要为该单一实例提供一个全局访问点

单例模式的实现方式

  •  1.懒汉式:线程不安全
public class Singleton{
    private static Singleton instance;
    //构造函数私有化
    private SingletonDemo1(){}
    public static Singleton getInstance(){
        if(instance==null){
            instance = new Singleton();
        }
        return instance;
    }
}
  • 2.懒汉式  线程安全
public class Singleton{
    private static Singleton instance;
    private Singleton(){}
    public static synchronized Singleton getInstance(){
        if(instance==null){
            instance = new Singleton();
        } 
        return instance;
    }
}
  • 3.饿汉式
public class Singleton{
    private static Singleton instance = new Singleton();
    private Singleton(){}
    public static Singleton getInstance(){
        return instance;
    }
}
  • 4.饿汉式 静态块在类加载的时候就实例化instance
public class Singleton{
    private static Singleton instance  = null;
    private Singleton(){}
    static{
        instance = new Singleton();
    }
    public static Singleton getInstance(){
        return instance;
    }
}
  • 5.静态内部类
public class Singleton {
    private static class SingletonHolder{
        private static final Singleton instance = new Singleton();
    }
    private Singleton(){}
    public static Singleton getInstance(){
        return SingletonHolder.instance;
    }
}
  • 6.双重校验锁
    public class Singleton{
        //volatile修饰变量是为了防止指令重排序
        private volatile static Singleton instance;
        private Singleton(){}
        public static Singleton getInstance(){
            if(instance==null){
                synchronized(Singleton.class){
                    if(instance==null){
                        instance = new Singleton();
                    }
                }
            }
        }
    }

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值