设计模式——单例模式 双重检验

//饿汉式,等调用时再创建对象
public class Single {//也可以写final
    private static Single instance = null;//这个和下面的方法必须是静态的,这样才能类名.方法来调用方法。用的时候才new对象。
    static Object object = new Object();    //否则无法调用方法。

    private Single() {
        // 这样就不能new这个类!
    }

    //双重检验是因为,synchronized是较重的锁,会使并发效率较低。
    public static Single getSingle() {
        if (instance == null) {
            synchronized (object) {
                if (instance == null) {
                    instance = new Single();
                }
            }
        }
        return instance;
    }
}
//懒汉式,不管三七二十一,先new一个出来
class Single2 {
    private static Single2 instance = new Single2();

    private Single2() {
        //这样就不能new这个类!
    }

    public static Single2 getSingle() {
        return instance;
    }
}
import org.junit.Test;

public class UnitTest {
    @Test
    public void TestSingle() {
        Single s = null;
        s = s.getSingle();
        Single s2 = null;
        s2 = s2.getSingle();
        System.out.println("单例模式是否成功:" + (s == s2));
    }
}
单例模式是否成功:true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值