单例模式,不多说了,这个模式和静态函数有什么区别,之前解释过了,不是今天重点。
这个贴的重点是,单例模式的这个单例,如何初始化。
其实单例的初始化有两种:一种是提前初始化,就是说,在程序使用单例时,先由其他程序保证这个实例已经初始化结束。
这个比较简单,也不是本贴的重点。
另外一种就是程序一开始不初始化,仅仅在单例第一次被调用的时候被初始化。
中间怎么演变就不说了。总之这里技巧是要解决一个矛盾:第一次使用时初始化,就必需要用同步机制,在对象使用前是否已经初始化。
但是加锁后,极大的降低了程序的性能,尤其判断比较复杂的时候。曾经有文章在设计模式界批判“单例是魔鬼”就出于此。
现在很多的补充做法可以尽量的避免这种方式。文字不好解释,给个代码模型吧。
public class Singl{
/**
*单例形成,不允许外部实例化
*/
private Singl(){
}
private static Singl instance;
private Object lock = new Object();
private static Singl getSingl(){
if (instance == null){//第一次判断不要同步
synchronized(lock){//第二次在上锁同步,且要再判断一次
if (instance == null){//第一次判断不要同步
instance = new Singl()
}
}
}
return instance;
}
}
搞定!
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
懒惰收集用于 Java 的非严格(惰性)集合,其中可以基本上形成一系列函数,并且仅根据需要执行评估。 它使用 Java 7 作为默认 JDK 版本。 该项目针对 JDK 7,因此不会有 lambda 和 java 8 流支持。 如果您正在寻找 ...
完整的《设计模式》学习笔记使用C++的通俗易懂的实现! 看了你就应该明白每个模式的具体实现了~~ 整理成册
主要介绍了Java正则之贪婪匹配、惰性匹配的相关资料,需要的朋友可以参考下
声明一个其他类的成员初始化该成员定义处进行初始化构造器中初始化在构造器中进行初始化成员类实例初始化利用实例初始化语法,使用大括号包括惰性初始化在方法中,对成员进
主要介绍了简单探索 Java 中的惰性计算,惰性计算(尽可能延迟表达式求值)是许多函数式编程语言的特性。惰性集合在需要时提供其元素,无需预先计算它们,这带来了一些好处。,需要的朋友可以参考下
单例模式的例子:闭包实现私有成员的单例模式例子:var Ellyliang = (function() {闭包实现私有成员的惰性实例化单例模式:var Elly
为解决煤粉仓CO浓度或温度增高导致的自燃问题,根据煤粉工业锅炉系统燃料安全储存需求,参照相关国家标准和...结果表明:采用低压CO2惰化系统对煤粉仓实施保护,当保护气体CO2的储存量为355 kg,可明显降低煤粉自燃的风险。
在Swift 5.1中具有延迟初始化值的几种方法。 请注意,如果您对Swift的lazy关键字的行为感到满意,则应使用该关键字。 这是针对: :不可重置的惰性模式,以确保Swift语言版本之间的惰性行为 :可惰性模式,其值仅在...
向对象添加延迟初始化的属性。 例子 var addLazyProperty = require ( "lazy-property" ) var obj = { } addLazyProperty ( obj , "foo" , function ( ) { console . log ( "initialized!" ) return "bar" } ) //...
LazyObject.js 允许您定义对象的属性,该对象的值仅在第一次访问时初始化。 从那时起,值被缓存/记忆。 它的defineLazyProperty函数紧跟Object.defineProperty签名,允许您更改定义的属性是否可configurable 、 ...
java实现验证码功能源码 Java 8 的惰性序列实现 介绍 惰性序列是一种数据结构,仅在实际需要其元素时才进行计算。 对惰性序列的所有操作,如map()和filter()也是惰性的,将调用推迟到真正需要的那一刻。 惰性序列...
单例模式是JavaScript项目中最常用的设计模式之一,下面罗列了JavaScript实现设计模式中的单例模式的一些技巧总结,包括惰性加载与分支技术等,需要的朋友可以参考下.
三、人性化管理-易滋生员工惰性.doc
数值结果证实了理论上的分类,并且可以将六种类型的相互作用形式进一步合并为声速较小的惰性材料的五种类型,而且,数值方法可以给出一种新的类型的相互作用形式,在封闭的惰性材料中存在先驱波具有比Chapman-...
为有效消除矿井采空区自然发火隐患,针对现有矿井单一惰性气体防灭火技术的不足,开展复合惰性气体防灭火技术研究。结合N2与CO2防灭火机理及其特性分析,提出地面固定式N2与CO2耦合气体耦合灌注的复合惰性气体防灭火...
inert, 用于惰性属性和属性的Polyfill inert 属性/属性允许网页作者将DOM树的部分标记为惰性:当 node 为惰性时,如果目标为目标用户交互事件,则 User Agent 必须为 node,可能忽略用户在页面中搜索用户界面的目的,...
我们考虑将标准模型嵌入惰性希格斯二重态字段。 我们认为,惰性希格斯双峰可以自然地出现在统一的理论中,其中必要的Z2对称性可以自动发生。 讨论了几个例子。
inert-polyfill, HTML惰性属性的Polyfill inert HTML属性... 查看一个小演示程序。inert 属性是一个草稿特性( HTML ),它是HTML的 。 就 2017年月 而言,没有浏览器拥有 inert的本地实现。 然而,有活动开发 inside Ch
主要介绍了JavaScript设计模式之单例模式原理与用法,结合实例形式分析了单例模式的原理、命名空间的使用、闭包、惰性单例形式以及单例模式的基本应用,需要的朋友可以参考下
词干分析器类是单例的,线程安全的,并且是惰性初始化的 ####用法 //it is implemented as an enum to guarantee //a singleton, thread safe and lazy initialized object Stemmer stemmer = Resha.Instance;...