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

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

hot3.png

1.    什么是单例模式?
       一个类有且仅有一个实例,并且自行实例化向整个系统提供。
2.   特点
     a.  一个类只有一个实例
     b.  必须自行创建该实例
     c.  必须自行向整个系统提供该实例
     d.  不能被继承
3.   单例模式的作用?
      保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。
4.   单例模式实现方式?
      a. 饿汉式     
        
public class Singleton {      private static EagerSingleton instance = new EagerSingleton();    private Singleton() { //私有构造函数  }        public static EagerSingleton getInstance()    {        return instance;    }    }
     b. 懒汉式
        // 懒汉式---存在线程安全问题---会产生多个实例
 
public class SingletonClass{        private static SingletonClass instance=null;        private SingletonClass(){}        public static SingletonClass getInstance(){        if(instance==null){           instance=new SingletonClass();            }        }        return instance;        }    }
    // 懒汉式---不存在线程安全问题------效率比较低
   
public class SingletonClass{        private static SingletonClass instance=null;        private SingletonClass(){}        public static synchronized SingletonClass getInstance(){        if(instance==null){           instance=new SingletonClass();            }        }        return instance;        }    }
    // 懒汉式---不存在线程安全问题-----效率高
  
public class SingletonClass{        private static SingletonClass instance=null;        private SingletonClass(){}        public static SingletonClass getInstance(){        if(instance==null){            synchronized(SingletonClass.class){            if(instance==null){                instance=new SingletonClass();            }            }        }        return instance;        }    }
    说明:synchronized方法与synchronized代码快的区别
         synchronized methods(){} 便于阅读理解;
         synchronized(this){}可以更精确的控制冲突限制访问区域,有时候表现更高效率。
5.   单例模式实现方式的区别:
     饿汉式:在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快
     懒汉式:在类加载时,不创建实例,因此类加载速度快,但运行时获取对象的速度慢
6.   单例模式应用:
     a. 在线人数;
     b. windows任务管理器----只能打开一个;
     c. windows回收站;
     d. 应用程序的日志应用---在整个系统运行过程中,回收站一直维护者仅有的一个实例;
     e. web应用的配置对象的读取---配置文件是共享的资源;
     f. 数据库连接池的设计---采用单例能节省打开或关闭数据库连接所引起效率损耗;

 7. 线程安全与CPU核数有关吗?

    无关,只是在单核情况下,有些问题复现概率更低。

转载于:https://my.oschina.net/u/1989867/blog/528151

你可能感兴趣的文章
Oracle 字符串处理函数
查看>>
中国银行涉嫌洗黑钱却另有隐情?
查看>>
排序问题分析
查看>>
【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(9) 角色管理,分配权限...
查看>>
《程序是怎样跑起来的》读书笔记——第八章 从源文件到可执行文件
查看>>
【一句日历】2019年5月
查看>>
服务器端产生大量的close_time
查看>>
自定义从Azure下载回来的远程桌面连接(.rdp)文件,使其提供更多丰富功能
查看>>
c语言高级语言控制成分while,这衣服收费的形式特征有
查看>>
android bitmap 描边,Android 绘图之Canvas相关API使用
查看>>
计算机科学导论计算实例,经典计算计算模型计算机科学导论.ppt
查看>>
如何确定一个网站是用Wordpress开发的
查看>>
爬虫采集-基于webkit核心的客户端Ghost.py [爬虫实例]
查看>>
VDI序曲一 服务器虚拟化
查看>>
先考学历还是先提升能力?
查看>>
四、物理优化(7)查看索引使用情况
查看>>
[原创]如何从数据库层面检测两表内容的一致性
查看>>
学霸装学渣
查看>>
Microsoft Dynamics CRM 2015 完全安装好以后 完全备份
查看>>
git 在windows下的应用(一) - 本地仓库代码管理
查看>>