静态内部类单例

静态内部类单例是一种线程安全且延迟加载的单例实现方式,它将单例对象置于静态内部类中,首次调用时创建。这种方式避免了早期初始化,同时保证了线程安全。常见应用包括工具类和日志管理类等。

1、简介

静态内部类单例是一种线程安全的单例实现方式,它利用了Java 的类加载机制来实现单例模式。

它的实现思路是将单例的实例放在一个静态内部类中,在第一次调用单例对象时再进行创建。这种实现方式既能保证线程安全,又能保证单例对象的延迟加载。

2、代码实现

public class Singleton {
    //Singleton单例
    private Singleton(){}
    private static class SingletonHolder{
        private static final Singleton INSTANCE = new Singleton();
    }
    public static Singleton getInstance(){
        return SingletonHolder.INSTANCE;
    }
}

3、优缺点

优点:

①线程安全:由于使用了Java类加载机制,单例对象在类加载阶段就已经创建好,并且只会创建一次,因此是线程安全的。

②类加载性能优秀:在使用单例对象时才会进行创建,而且只会创建一次,在资源有限的情况下能够节约内存。

③使用简单:通过Singleton.getInstance()来获取单例对象

缺点:

①可能会增加类的数量,因为需要一个静态内部类来保存单例对象

②第一次加载时可能会略微增加启动时间

总结来说,静态内部类单例是一种实现单例模式的优秀方式,它既保证了线程安全,又具有很好的类加载性能,并且使用起来非常方便。

4、应用场景

静态内部类单例模式非常适合在需要频繁使用、且资源占用较小的单例对象时使用。

常见的应用场景有:

①工具类:比如日期处理工具类、字符串工具类等

这些工具类一般需要非常频繁地使用,而且资源消耗也不大,所以可以使用静态内部类单例模式来实现。

public class DateUtils {
    private DateUtils(){}
    private static class DateUtilsHolder {
        private static final DateUtils INSTANCE = new DateUtils();
    }
    public static DateUtils getInstance() {
        return DateUtilsHolder.INSTANCE;
    }
    public String formatDate(Date date){
        //do format job
    }
}

②日志管理类:由于日志管理类可能会在多个地方使用,并且资源消耗也不大,所以可以使用静态内部类单例模式来实现。

public class Logger {
    private Logger(){}
    private static class LoggerHolder {
        private static final Logger INSTANCE = new Logger();
    }
    public static Logger getInstance() {
        return LoggerHolder.INSTANCE;
    }
    public void log(String message){
        //do log job
    }
}

静态内部类的实际应用场景不局限在这里,还有很多其他场景可以使用,如配置管理类、高效缓存类等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逐梦苍穹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值