单例模式实现

简介: 1. 单线程可用 2. 使用final常量 3. 加锁构造 4. 方法级加锁 5. 静态内部类实现,多线程可用 6. 拒绝强行反射创建我

1. 单线程可用

public class Singleton {

    private static Singleton singleton;

    private Singleton() {
    }

    public static Singleton getInstance() {
        if (null == singleton) {
            singleton = new Singleton();
        }
        return singleton;
    }
}
AI 代码解读

2. 使用final常量

public class Singleton {

    private static final Singleton singleton = new Singleton();

    private Singleton() {
    }

    public static Singleton getInstance() {
        return singleton;
    }
}
AI 代码解读

3. 加锁构造

public class Singleton {

    private static Singleton singleton;

    private static final Lock LOCK = new ReentrantLock();

    private Singleton() {
    }

    public static Singleton getInstance() {
        if (null == singleton) {
            LOCK.lock();
            if (null == singleton) {
                singleton = new Singleton();
            }
            LOCK.unlock();
        }
        return singleton;
    }
}
AI 代码解读

4. 方法级加锁

public class Singleton {

    private static Singleton singleton;

    private Singleton() {
    }

    public static Singleton getInstance() {
        if (null == singleton) {
            init();
        }
        return singleton;
    }

    private static synchronized void init(){
        if(null == singleton){
            singleton = new Singleton();
        }
    }
}
AI 代码解读

5. 静态内部类实现,多线程可用

public class Singleton {

    private Singleton() {
    }

    public static Singleton getInstance() {
        return Container.singleton;
    }

    private static class Container {
        private static Singleton singleton = new Singleton();
    }
}
AI 代码解读

6. 拒绝强行反射创建我

public class Singleton {

    private Singleton() {
        if (null != Container.singleton) {
            throw new UnsupportedOperationException(); // 报错啦
        }
    }

    public static Singleton getInstance() {
        return Container.singleton;
    }

    private static class Container {
        private static Singleton singleton = new Singleton();
    }
}
AI 代码解读
目录
打赏
0
0
0
0
946
分享
相关文章
微服务注册中心的原理和实现方式
【2月更文挑战第19天】注册中心可以说是实现服务化的关键,因为服务化之后,服务提供者和服务消费者不在同一个进程中运行,实现了解耦,这就需要一个纽带去连接服务提供者和服务消费者,而注册中心就正好承担了这一角色。
docker在欧拉服务器上编译安装应该注意什么?如何操作?
【10月更文挑战第31天】docker在欧拉服务器上编译安装应该注意什么?如何操作?
252 2
|
7月前
大规模、动态语音增强/分离新基准!清华发布移动音源仿真平台SonicSim,含950+小时训练数据
清华大学研究团队推出SonicSim,一款专为语音增强和分离技术设计的移动音源仿真平台。它基于Habitat-sim开发,能生成高度可定制的合成数据,涵盖多个层次的调整选项,有效解决了现有数据集在数量和多样性上的不足。SonicSim不仅提升了模型训练和评估的真实性和全面性,还通过构建SonicSet基准数据集,进一步推动了该领域的研究进展。
152 20
Redis集群哈希槽数据分片
Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽. 集群的每个节点负责一部分hash槽。这种结构很容易添加或者删除节点,并且无论是添加删除或者修改某一个节点,都不会造成集群不可用的状态。
380 0
Redis集群哈希槽数据分片
Java一分钟之-PowerMock:静态方法与私有方法测试
【6月更文挑战第4天】PowerMock是扩展Mockito的框架,用于模拟静态方法、构造函数和私有方法,以增强Java单元测试的隔离性和覆盖率。核心应用场景包括静态方法模拟、私有方法测试和Final类模拟。常见问题包括配置复杂、过度使用和忽略模拟的真实行为。解决方案包括遵循官方文档、谨慎使用PowerMock、精确控制模拟逻辑和遵循最佳实践。示例展示了如何模拟静态方法,通过添加PowerMock依赖和使用`PowerMockRunner`、`PrepareForTest`注解,以及`PowerMockito.mockStatic`和`verifyStatic`方法进行测试。
563 0
Java一分钟之-PowerMock:静态方法与私有方法测试
Oracle 12c的不可见字段:数据的“隐形斗篷”
【4月更文挑战第19天】Oracle 12c引入了不可见字段,这是一种隐藏数据列的特性,用于增强数据安全性和实现业务逻辑。不可见字段在常规查询中不显示,但参与数据操作,适合存储敏感信息或内部元数据。创建时只需在列定义中指定“INVISIBLE”属性。虽然有其限制,如特定查询可能暴露,但正确使用能有效提升数据安全性。了解和利用这一功能对数据管理员至关重要。
语音识别与处理:Python 应用
语音识别与处理是计算机科学和人工智能领域中的重要研究方向,它的目标是让计算机能够理解和处理人类的语音。Python 提供了许多强大的库和工具,使得语音识别与处理变得更加容易。在本文中,我们将介绍一些常用的 Python 库,并通过一个简单的示例来演示如何使用它们进行语音识别与处理。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问