设计模式-单例模式
来源:互联网 发布:mac svn服务器地址 编辑:程序博客网 时间:2024/05/01 17:16
单例模式的应用场景
有些时候我们程序只需要一个对象:线程池,缓存,打印机这种硬件设备
比如打印机,如果是多个对象,又对应一个硬件,各自设置打印内容,就会混淆。
单例模式 : 确保一个类只有一个实例,并提供全局访问点
一般Singleton模式通常有三种形式:
- 饿汉式
- 懒汉式
- 双重锁的形式
1.懒汉式
通俗来说就是你很懒,需要的时候才new对象
public class SingletonClass{ private static SingletonClass instance=null; public static SingletonClass getInstance(){ if(instance==null){ instance=new SingletonClass(); } return instance; } private SingletonClass(){ //把构造方法使用private修饰,则不能外部new对象 }}
2.饿汉式
通俗来说就是你饿了,不要的时候也new一个对象
public class Singleton{ //在自己内部定义自己的一个实例,只供内部调用 private static final Singleton instance = new Singleton(); private Singleton(){ } public static Singleton getInstance(){ if(instance == null) { instance = new Singleton(); } return instance; }}
以上两种形式满足一般需求,懒汉式比较常用。但是在高并发的情况下就会出现问题,所以就引出了第三种
3.双重锁形式
public class Singleton{ private static volatile Singleton instance=null; private Singleton(){ //do something } public static Singleton getInstance(){ if(instance==null){ synchronized(Singleton.class){ if(instance==null){ instance=new Singleton(); } } } return instance; }}//这个模式将同步内容下方到if内部,提高了执行的效率,不必每次获取对象时 都进行同步,只有第一次才同步,创建了以后就没必要了。//这种模式中双重判断加同步的方式,比第一个例子中的效率大大提升,因为如果单层if判断,在服务器允许的情况下,//假设有一百个线程,耗费的时间为100*(同步判断时间+if判断时间),而如果双重if判断,100的线程可以同时if判断,理论消耗的时间只有一个if判断的时间。//所以如果面对高并发的情况,而且采用的是懒汉模式,最好的选择就是双重判断加同步的方式。
1 0
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 设计模式-单例模式
- [设计模式] 单例模式
- 设计模式--单例模式
- 设计模式---单例模式
- 设计模式--单例模式
- 设计模式 -----单例模式
- 设计模式:单例模式
- centos7安装scala
- SPFA算法
- Java 10进制byte数组与16进制byte数组互转 及 在DES加解密中的使用
- 增强学习论文记录
- LeetCode 58. Length of Last Word
- 设计模式-单例模式
- 对结对编程理解
- 欢迎使用CSDN-markdown编辑器
- 全面认识Depth - 这里有关于Depth的一切
- 51NOD 1105 第K大的数 【二分】
- 泛型编程C++实现栈
- SSH框架之Struts的数据校验(2)
- 常见排序算法的时间复杂度和空间复杂度对比表
- Visual Studio Community 2015 下载链接