博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单例模式
阅读量:4341 次
发布时间:2019-06-07

本文共 1605 字,大约阅读时间需要 5 分钟。

单例模式(Singleton):保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个

 

饿汉式(推荐):

 

public class Singleton {        // 类加载时生成实例对象,避免多线程时出问题    // 私有方法,避免被外部类直接访问    // 静态属性,保证实例对象可以在提供给外部类调用的方法内部使用    private static Singleton singleton = new Singleton() ;        // 构造函数必须是私有的     // 这样在外部便无法使用 new 来创建该类的实例     private Singleton(){}        // 静态方法,保证外部类调用时不需要生成对象    // 获取实例的唯一方法    public static Singleton getInstance(){        return singleton;    }}

 

 

懒汉式(适用于有些类比较庞大,延迟加载有助于提升性能。):

public class Singleton {        // 定义一个私有的静态全局变量来保存该类的唯一实例    private static Singleton singleton;    // 构造函数必须是私有的    // 这样在外部便无法使用 new 来创建该类的实例    private Singleton() {}    // 定义一个全局访问点    // 设置为静态方法    // 则在类的外部便无需实例化就可以调用该方法    public static Singleton GetInstance() {        /**         * 所以在没有第一重 singleton == null 的情况下,也是可以实现单例模式的?那么为什么需要第一重 singleton == null 呢?         * 这里就涉及一个性能问题了,因为对于单例模式的话,new Singleton()只需要执行一次就 OK 了,         * 而如果没有第一重 singleton == null 的话,每一次有线程进入 GetInstance()时,均会执行锁定操作来实现线程同步,         * 这是非常耗费性能的,而如果我加上第一重 singleton == null 的话,         * 那么就只有在第一次,也就是 singleton ==null 成立时的情况下执行一次锁定以实现线程同步,         * 而以后的话,便只要直接返回 Singleton 实例就 OK 了而根本无需再进入 lock 语句块了,这样就可以解决由线程同步带来的性能问题了。         */        // 这里可以保证只实例化一次,即在第一次调用时实例化,以后调用便不会再实例化,第一重 singleton == null        if (singleton == null) {                        synchronized (Singleton.class) {                                // 第二重 singleton == null                if (singleton == null) {                    singleton = new Singleton();                }            }        }        return singleton;    }}

 

转载于:https://www.cnblogs.com/Jtianlin/p/4804894.html

你可能感兴趣的文章
Sybase IQ导出文件的几种方式
查看>>
案例:手动输入一个字符串,打散放进一个列表,小写字母反序 大写字母保持不变...
查看>>
linux 系统下 tar 的压缩与解压缩命令
查看>>
阿里负载均衡,配置中间证书问题(在starcom申请免费DV ssl)
查看>>
转:How to force a wordbreaker to be used in Sharepoint Search
查看>>
MySQL存储过程定时任务
查看>>
Python中and(逻辑与)计算法则
查看>>
POJ 3267 The Cow Lexicon(动态规划)
查看>>
设计原理+设计模式
查看>>
tomcat 7服务器跨域问题解决
查看>>
前台实现ajax 需注意的地方
查看>>
Jenkins安装配置
查看>>
个人工作总结05(第二阶段)
查看>>
Java clone() 浅拷贝 深拷贝
查看>>
深入理解Java虚拟机&运行时数据区
查看>>
02-环境搭建
查看>>
spring第二冲刺阶段第七天
查看>>
搜索框键盘抬起事件2
查看>>
阿里百川SDK初始化失败 错误码是203
查看>>
透析Java本质-谁创建了对象,this是什么
查看>>