单例模式:静态内部类实现的单例模式是懒加载且线程安全的

由于加载一个类时,其内部类不会同时被加载。一个类被加载,当且仅当其某个静态成员(静态域、构造器、静态方法等)被调用时发生。因此使用静态内部类实现的单例模式是懒加载的且线程安全。

一、代码

public class UserSingleton {

    /** 私有化构造器 */

    private UserSingleton() {
    }

    /** 对外提供公共的访问方法 */
    public static UserSingleton getInstance() {

        return UserSingletonHolder.INSTANCE;
    }

    /** 写一个静态内部类,里面实例化外部类 */
    private static class UserSingletonHolder {
        private static final UserSingleton INSTANCE = new UserSingleton();
    }
}

二、小结

        (1)为什么这样实现就是单例的?

                 因为这个类的实例化是靠静态内部类的静态常量实例化的。

                 INSTANCE 是常量,因此只能赋值一次;它还是静态的,因此随着内部类一起加载。

        (2)这样实现有什么好处?

                  我记得以前接触的懒汉式的代码好像有线程安全问题,需要加同步锁才能解决。

                  采用静态内部类实现的代码也是懒加载的,只有第一次使用这个单例的实例的时候才加载;同时不会有线程安全问题

原文链接:https://www.cnblogs.com/zeng1994/p/7397637.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值