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

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

一.什么叫单例模式

    JVM所管理的内存也就是堆中只存在某个类的唯一一个实例,通过把构造函数私有化,然供一个静态方法提供唯一实例.单例模式经常被分为饿汉单例模式以及懒汉单例模式.饿汉单例模式是在类初始化的时候创建自己的实例.懒汉模式是在需要实例的时候再创建实例.

二.单例模式优点与缺点

    优点:内存中只存在一个实例所以减少了内存开销,针对一些创建和销毁对象时开销比较的情况单例模式可以减小系统性能开销.

   缺点:多线程下并发问题.

三.单例模式在jvm垃圾回收的时候的处理

      在网上看到有人提到了关于单例模式会不会被垃圾回收.我能证明的就是在Hotspot虚拟机中是不会被回收的.Hotspot虚拟机采用的可达性分析算法.单例类Class的referenceon永远指向之前的实例.而方法区中的Class对象不会被垃圾回收.所以单例是一直可达的,因此单例模式在Hotspot虚拟机中不会被回收.

四.单例模式的代码实现

1.饿汉式单例模式:

      

1 /** 2  3      * @author xg.qiu 4  5     * @TODO Java23种设计模式之单例模式 6  7      * @date 2015年5月14日17:15:57 8  9      * @see JDK 1.510 11      */12 13 public class Singleton{14 15 /*16 17  * 1.私有无参构造函数18 19  */20 21 private Singleton(){}22 23 /*24 25  * 2.私有静态的本类实例常量对象26 27  */28 29 private final static Singletoninstance = new Singleton(); 30 31 /*32 33  * 3.提供一个对外开放的方法(直接返回常量对象:instance)34 35  */36 37 public static SingletongetInstance(){38 39 // 直接返回40              return instance;41 42 }43 44 }

 

2.懒汉式单例模式(多线程下不安全): 

 

1   /** 2  3  * @author xg.qiu 4  5  * @TODO Java23种设计模式之单例模式:懒汉式 6  7  * @date 2015年5月14日17:15:57 8  9  * @see JDK 1.510 11  */12 13 public class Singleton {14 15 /*16 17  * 1.私有无参构造函数18 19  */20 21 private Singleton(){}22 23 /*24 25  * 2.私有静态的本类对象 不需要初始化26 27  */28 29 private  static Singleton instance = null; 30 31 /*32 33  * 3.提供一个对外开放的方法(直接返回常量对象:instance)34 35  */36 37 public static Singleton getInstance(){38 39 if(null == instance){40 41 // 加上线程锁42 43 synchronized (Singleton.class){44 45 if(null == instance)  instance = new Singleton();46 47 }48 49 }50 51 return instance;52 53 }54 55 }

 

转载于:https://www.cnblogs.com/XQiu/p/5087936.html

你可能感兴趣的文章
css点滴3—5种方式实现圆环
查看>>
剑指offer 最小的k个数 leetcode 215. Kth Largest Element in an Array
查看>>
screen 命令使用及示例
查看>>
windows10环境下的RabbitMQ安装步骤(图文)
查看>>
Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十八):kafka0.10.1 内置性能测试API用法示例...
查看>>
【html+css3】在一张jpg图片上,显示多张透明的png图片
查看>>
WPF 3D模型的一个扩展方法
查看>>
postgreSQL学习(二):pgsql的一些基础操作
查看>>
openstack之镜像管理
查看>>
Gartner 2018 年WAF魔力象限报告:云WAF持续增长,Bot管理与API安全拥有未来
查看>>
如何在Java客户端调用RESTful服务
查看>>
一个月薪两万的Web安全工程师要掌握哪些技能?
查看>>
同事写得Python对页面压测脚本
查看>>
H2:开源内存数据库引擎
查看>>
(原創) 何谓可读性高的程序? (C/C++)
查看>>
JAVA的类名.this
查看>>
TP复习8
查看>>
最近要用C#实现用免费smtp服务器(GMail)发邮件,贴段整理好的代码
查看>>
通信原理实践(一)——音频信号处理
查看>>
如何实现网页上的气球提示
查看>>