最新最准确内容建议直接访问原文:单例模式
主要介绍单例模式的标准写法、注意事项、作用、测试,以Java语言为例,下面代码是目前见过最好的写法:
public class Singleton { private static volatile Singleton instance = null; // private constructor suppresses private Singleton(){ } public static Singleton getInstance() { // if already inited, no need to get lock everytime if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } }
1、需要注意的点
其中需要注意的点主要有三点
(1) 私有化构造函数
(2) 定义静态的Singleton instance对象和getInstance()方法
(3) getInstance()方法中需要使用同步锁synchronized (Singleton.class)防止多线程同时进入造成instance被多次实例化
可以看到上面在synchronized (Singleton.class)外又添加了一层if,这是为了在instance已经实例化后下次进入不必执行synchronized (Singleton.class)获取对象锁,从而提高性能。
Ps: 也有实现使用的是private static Object obj = new Object();加上synchronized(obj),实际没有必要多创建一个对象。synchronized(X.class) is used to make sure that there is exactly one Thread in the block.
2、单例的作用
单例主要有两个作用
(1) 保持程序运行过程中该类始终只存在一个示例
(2) 对于new性能消耗较大的类,只实例化一次可以提高性能
3、单例模式测试
单例模式可以使用多线程并发进行测试,代码如下:
你可能还感兴趣:
相关推荐
JavaSE单例模式各种写法单例模式
android资料 单例模式的八种写法比较 单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。
单例模式的七种写法: 1.第一种(懒汉,线程不安全) 2.第二种(懒汉,线程安全) 3.第三种(饿汉) .....
此文档为Tom老师的公开课的单例的7种写法的一个文档,充分分析单例模式,值得对设计模式有研究的童鞋下下来好好看看
单例的多种写法效率和方法同步比较说明,常用懒汉和饥汉模式等
自己总结的6中单例模式的写法,也有测试类,可以试验下,自己稍微修改一下后,验证安全性,纯粹为学习,建议可提
1、掌握单例模式的应用场景。 2、掌握 IDEA 环境下的多线程调试方式。 3、掌握保证线程安全的单例模式策略。 4、掌握反射暴力攻击单例解决方案及原理分析。...5、序列化破坏单例的原理及...6、掌握常见的单例模式写法。
主要介绍了IOS 中两种单例模式的写法实例详解的相关资料,需要的朋友可以参考下
java单例模式开发的7中写法,网上搜索的,可以看看
unity中在场景切换时需要经常数据分享并处理,在此分享给大家利用C#模式和Unity模式分别实现的单例共享数据
static静态关键字和单例模式
NULL 博文链接:https://kaka100.iteye.com/blog/1060519
Objective-c 单例模式的完整书写方式,用了很久的单例模式了,却发现singleton的用法也是蛮有讲究的。不过一般情况下,即使不书写完整的单例,也不会出现什么意外情况。。
深入分析java单例模式什么是单例模式单例模式的常见写法一、饿汉式单例优点缺点示例二、懒汉式单例示例1(普通写法)示例2(synchronized写法)示例3(DCL写法)示例4(内部类写法)三、注册式单例示例1(容器式)示例2(枚举式...
操作数据库的时候找了很久没有找到一个合适的链式的Db类,即便有但是没有用到单例模式,老是实例化耗资源,后来便萌生了自己编写一个好用的Db类,于是开始了封装,mysql封装类是根据thinkphp的Db写法编写,...
这一次重温一下《JavaScript设计模式与开发实践》,开篇为单例模式。 /** * pre 单例模式 * 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点 * 应用:单例模式是一种常用的模式,有一些对象我们...
2、单例类必须自己创建自己的唯一实例 3、单例类必须给所有其他对象提供这一实例 2、资源加载和性能:饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会