java单例模式

文章介绍了Java中三种实现单例模式的方法:懒汉式,饿汉式和静态内部类。懒汉式在多线程环境下可能不安全,但可以通过双重锁检查提高安全性。饿汉式在类加载时就创建实例,保证线程安全但可能导致资源浪费。静态内部类方式利用类加载机制保证线程安全,且无额外性能影响。
摘要由CSDN通过智能技术生成

1:懒汉式

public class SingleTest {
    private static SingleTest singleTest = null;
    private SingleTest(){
    }

    // 可以在方法上加上synchronized,可以使线程安全,但是这样每次调用都会同步,会影响性能
    public static SingleTest getInstance(){
        if (singleTest==null){
            singleTest = new SingleTest();
        }
        return singleTest;
    }
    // 双重锁检查式
    //优点:线程安全,且确保了只有第一次调用单例时才会做同步,避免了每次都同步的性能损耗;
    //缺点:双重锁降低了程序响应速度和性能
    public static SingleTest getInstance2(){
        if (singleTest==null){
            synchronized (SingleTest.class){
                if (singleTest==null){
                    singleTest = new SingleTest();
                }
            }
        }
        return singleTest;
    }

    // 静态内部类式
    //利用了classloader机制来保证初始化instance时只有一个线程,线程安全且没有性能损耗
    private static class Single2{
        private static final SingleTest INSTANCE = new SingleTest();
    }

    public static final SingleTest getInstance3(){
        return Single2.INSTANCE;
    }
}

2:饿汉式

public class SingleTest2 {
    //饿汉式 类初始化的时候就立刻实例化,天生线程安全
    //系统启动时,占用资源;如果后期这个单例没有被使用,会造成资源浪费
    private SingleTest2(){}

    private static final SingleTest2 instance = new SingleTest2();

    public static SingleTest2 getInstance(){
        return instance;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值