单例模式-饿汉式与懒汉式-20201029

单例模式:单例的目的是保证某个类只有一个实例,当某些类创建太消耗内存时,可以考虑使用单例模式,单例模式分为 饿汉式 和 懒汉式
1:饿汉式

public class ConnectUtil {
    private ConnectUtil(){};

    public static ConnectUtil connectUtil = new ConnectUtil();

    public static ConnectUtil getInstance(){
        return connectUtil;
    }

}

步骤1:首先将无参构造私有化
步骤2:new 一个对象
步骤3:给一个获取该对象的入口

这种创建方式非常简单,而且是线程安全的(只在类加载时才会初始化,以后都不会),但是有一个缺点就是,不管你需要不需要都会创建这么个对象,会消耗一定的内存。
2:懒汉式
该模式只在你需要对象时才会生成单例对象(比如调用getInstance方法)

第一种实现方式:

public class ConnectUtil1 {
    private ConnectUtil1(){};
    public static ConnectUtil1 connectUtil;
    //懒汉式
    public static ConnectUtil1 getInstance(){
        if (connectUtil == null) {
            connectUtil = new ConnectUtil1();
        }
        return connectUtil;
    }

}

上面这种方式是线程不安全的,为了实现线程安全,可以使用synchronized 加锁的方式实现
第二种实现方式:

public class ConnectUtil1 {
    private ConnectUtil1(){};

    public static ConnectUtil1 connectUtil;


    public static ConnectUtil1 getInstance(){
        if (connectUtil == null) {
            synchronized (ConnectUtil1.class) {
                if (connectUtil == null) {
                    connectUtil = new ConnectUtil1();
                }
            }
        }
        return connectUtil;
    }
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值