- 浏览: 1449625 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (691)
- linux (207)
- shell (33)
- java (42)
- 其他 (22)
- javascript (33)
- cloud (16)
- python (33)
- c (48)
- sql (12)
- 工具 (6)
- 缓存 (16)
- ubuntu (7)
- perl (3)
- lua (2)
- 超级有用 (2)
- 服务器 (2)
- mac (22)
- nginx (34)
- php (2)
- 内核 (2)
- gdb (13)
- ICTCLAS (2)
- mac android (0)
- unix (1)
- android (1)
- vim (1)
- epoll (1)
- ios (21)
- mysql (3)
- systemtap (1)
- 算法 (2)
- 汇编 (2)
- arm (3)
- 我的数据结构 (8)
- websocket (12)
- hadoop (5)
- thrift (2)
- hbase (1)
- graphviz (1)
- redis (1)
- raspberry (2)
- qemu (31)
- opencv (4)
- socket (1)
- opengl (1)
- ibeacons (1)
- emacs (6)
- openstack (24)
- docker (1)
- webrtc (11)
- angularjs (2)
- neutron (23)
- jslinux (18)
- 网络 (13)
- tap (9)
- tensorflow (8)
- nlu (4)
- asm.js (5)
- sip (3)
- xl2tp (5)
- conda (1)
- emscripten (6)
- ffmpeg (10)
- srt (1)
- wasm (5)
- bert (3)
- kaldi (4)
- 知识图谱 (1)
最新评论
-
wahahachuang8:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
websocket的helloworld -
q114687576:
http://www.blue-zero.com/WebSoc ...
websocket的helloworld -
zhaoyanzimm:
感谢您的分享,给我提供了很大的帮助,在使用过程中发现了一个问题 ...
nginx的helloworld模块的helloworld -
haoningabc:
leebyte 写道太NB了,期待早日用上Killinux!么 ...
qemu+emacs+gdb调试内核 -
leebyte:
太NB了,期待早日用上Killinux!
qemu+emacs+gdb调试内核
package com.sohu.zookeeper;
//第一种(懒汉,线程不安全):
// 这种写法lazy loading很明显,但是致命的是在多线程不能正常工作。 第二种(懒汉,线程安全):
// 这种写法能够在多线程中很好的工作,而且看起来它也具备很好的lazy loading,但是,遗憾的是,效率很低,99%情况下不需要同步。 第三种(饿汉):
// 这种方式基于classloder机制避免了多线程的同步问题,不过,instance在类装载时就实例化,
// 虽然导致类装载的原因有很多种,在单例模式中大多数都是调用getInstance方法,
// 但是也不能确定有其他的方式(或者其他的静态方法)导致类装载,
// 这时候初始化instance显然没有达到lazy loading的效果 第四种(饿汉,变种):
// 表面上看起来差别挺大,其实更第三种方式差不多,都是在类初始化即实例化instance。 第五种(静态内部类):
// 这种方式同样利用了classloder的机制来保证初始化instance时只有一个线程,
// 它跟第三种和第四种方式不同的是(很细微的差别):第三种和第四种方式是只要Singleton类被装载了,
// 那么instance就会被实例化(没有达到lazy
// loading效果),而这种方式是Singleton类被装载了,instance不一定被初始化。
// 因为SingletonHolder类没有被主动使用,只有显示通过调用getInstance方法时,才会显示装载SingletonHolder类,
// 从而实例化instance。想象一下,如果实例化instance很消耗资源,我想让他延迟加载,另外一方面,
// 我不希望在Singleton类加载时就实例化,因为我不能确保Singleton类还可能在其他的地方被主动使用从而被加载,
// 那么这个时候实例化instance显然是不合适的。这个时候,这种方式相比第三和第四种方式就显得很合理。
// 第六种(枚举):
// 这种方式是Effective Java作者Josh Bloch
// 提倡的方式,它不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象,可谓是很坚强的壁垒啊,
// 不过,个人认为由于1.5中才加入enum特性,用这种方式写不免让人感觉生疏,在实际工作中,我也很少看见有人这么写过。
// 第七种(双重校验锁):
//第一种(懒汉,线程不安全):
public class Singleton { private static Singleton instance; public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
// 这种写法lazy loading很明显,但是致命的是在多线程不能正常工作。 第二种(懒汉,线程安全):
public class Singleton { private static Singleton instance; public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
// 这种写法能够在多线程中很好的工作,而且看起来它也具备很好的lazy loading,但是,遗憾的是,效率很低,99%情况下不需要同步。 第三种(饿汉):
public class Singleton { private static Singleton instance = new Singleton(); private Singleton() { }; public static Singleton getInstance() { return instance; } }
// 这种方式基于classloder机制避免了多线程的同步问题,不过,instance在类装载时就实例化,
// 虽然导致类装载的原因有很多种,在单例模式中大多数都是调用getInstance方法,
// 但是也不能确定有其他的方式(或者其他的静态方法)导致类装载,
// 这时候初始化instance显然没有达到lazy loading的效果 第四种(饿汉,变种):
public class Singleton { private Singleton instance = null; static { instance = new Singleton(); } public static Singleton getInstance() { return this.instance; } }
// 表面上看起来差别挺大,其实更第三种方式差不多,都是在类初始化即实例化instance。 第五种(静态内部类):
public class Singleton { private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } public static final Singleton getInstance() { return SingletonHolder.INSTANCE; } }
// 这种方式同样利用了classloder的机制来保证初始化instance时只有一个线程,
// 它跟第三种和第四种方式不同的是(很细微的差别):第三种和第四种方式是只要Singleton类被装载了,
// 那么instance就会被实例化(没有达到lazy
// loading效果),而这种方式是Singleton类被装载了,instance不一定被初始化。
// 因为SingletonHolder类没有被主动使用,只有显示通过调用getInstance方法时,才会显示装载SingletonHolder类,
// 从而实例化instance。想象一下,如果实例化instance很消耗资源,我想让他延迟加载,另外一方面,
// 我不希望在Singleton类加载时就实例化,因为我不能确保Singleton类还可能在其他的地方被主动使用从而被加载,
// 那么这个时候实例化instance显然是不合适的。这个时候,这种方式相比第三和第四种方式就显得很合理。
// 第六种(枚举):
public enum Singleton { INSTANCE; public void whateverMethod() { } }
// 这种方式是Effective Java作者Josh Bloch
// 提倡的方式,它不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象,可谓是很坚强的壁垒啊,
// 不过,个人认为由于1.5中才加入enum特性,用这种方式写不免让人感觉生疏,在实际工作中,我也很少看见有人这么写过。
// 第七种(双重校验锁):
public class Singleton { private volatile static Singleton singleton; public static Singleton getSingleton() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } }
发表评论
-
tomcat的https的例子
2016-09-22 17:50 435参考http://jingyan.baidu.com/arti ... -
jpa
2014-11-25 20:14 548可以使用jpa生成数据库表 import javax.pe ... -
hadoop复习 1搭建
2014-07-23 17:38 758参考http://hadoop.apache.org/docs ... -
jspwebshell
2014-06-20 12:35 6693<%@ page contentType=" ... -
jvm总结
2013-03-04 19:02 1711分代 年轻代: 所有新生 ... -
java的upload
2013-01-24 19:31 1934好久没写java的东西了 遇到个服务器,不是标准的httpSe ... -
spring lucene rmi例子
2012-09-18 16:24 1877http://www.blogjava.net/freeman ... -
jna的使用
2012-04-22 21:06 2840遇到java调用共享内存的 ... -
hessian
2012-04-10 10:40 893http://hessian.caucho.com/ 这个好 ... -
jvm调优应该知道的一点东西
2012-02-27 18:13 1238概念 概念 Java 工具 jsta ... -
java socket备份
2012-02-22 10:01 1032package org.hao; import java ... -
java操作内存
2011-12-29 00:57 5140How To Write Directly to a Memo ... -
jprofiler6远程resin
2011-07-07 23:17 2669网上找的破解码:L-Larry_Lau@163.com#784 ... -
eclipse不装插件配置resin,可以debug
2011-06-27 23:41 1809新建java工程 1.目录如下 G:. ├─.settings ... -
session所有信息
2011-06-07 11:32 767转载http://www.99inf.net/Software ... -
看端口号用netstat -abn
2011-05-14 00:27 1269张孝祥讲过个fport,到哪都依赖他看端口被什么占用, 原来n ... -
hessian的helloworld
2011-05-12 11:02 1169参考http://hessian.caucho.com/#Ex ... -
resin日志
2011-05-03 14:40 1432resin-pro-3.1.9\conf\resin.conf ... -
maven-resin
2011-05-02 22:39 2316关于resin http://2hei.net/mt/2008 ... -
maven笔记
2011-05-02 14:31 1627国内的源 <repository ...
相关推荐
设计模式之七种单例模式代码及ppt,包含多线程环境测试和反序列化测试
3. 单例模式的7种实现方式 5 3.1饿汉式(使用静态常量) 5 3.2饿汉式(使用静态代码块) 7 3.3懒汉式(线程不安全) 8 3.4懒汉式(线程安全,使用同步方法) 9 3.5双重检查实现单例模式 10 3.6使用静态内部类实现...
此文档为Tom老师的公开课的单例的7种写法的一个文档,充分分析单例模式,值得对设计模式有研究的童鞋下下来好好看看
单例模式的七种写法: 1.第一种(懒汉,线程不安全) 2.第二种(懒汉,线程安全) 3.第三种(饿汉) .....
java单例模式开发的7中写法,网上搜索的,可以看看
关于单例模式的知识要点: 1、某个类只能有一个实例 2、它必须自行创建这个实例 3、必须自行向这个系统提供这个实例
本压缩包含有两个demo,分别对应<设计模式>第2版,刘伟这本书,单例模式这一章课后习题6、7,如果问题请留言一起探讨,谢谢!
NULL 博文链接:https://zhaohong.iteye.com/blog/483396
单例模式是23个模式中比较简单的模式,应用也非常广泛 什么是单例模式? 单例模式的定义: Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类 只有一个实例...
饿汉变种实现单例模式7. 枚举实现单例模式static修饰下是怎么做到线程安全的?完全不使用synchronized实现单例模式1. CAS(AtomicReference)实现单例模式2. ThreadLocal实现单例模式如何破坏单例如何防止单例被...
这种写法可以保证线程安全.两个if都是不能去掉的.如果去掉第一个if: 那么所有的线程都会到这里来先获取锁,然后判断singleton是否为空.所有线程都会串行
单例模式是一种设计模式,它的具体实现和各种语言特性有关,这里主要介绍在C++上面的实现,测试平台为Win7 64位,VS2010开发环境。 根据参考博文中的例子,在此先列举一下各种实现策略,以下均以CSingleton为...
最后我就封装了一个单例模式的数据库类 使用单例模式是为了避免生成多个实例,浪费资源 下面是封装的代码 class Mongo_db { private static $cli; /** * 不允许初始化 */ private function __construct() { ...
其实单例模式在C#或者.NET里面更好理解,像win7的任务管理器,在系统中只能创建一个。有些理解了嘛? 单例模式只能有一个实例,实例化其实就是new的过程,是不可能阻止他人不去用new的。所以我们完全可以直接就把这...
2 单例模式 2 门面模式 2 模板方法模式 3 策略模式 3 工厂方法模式 3 组合模式 4 抽象工厂模式 4 代理模式 4 命令模式 5 迭代器模式 5 适配器模式 5 原型模式 6 简单工厂模式 6 解释器模式 6 享元模式 7 桥接模式 7 ...
这是一个使用C#简单三层的...3、单例模式 4、C#中的API获取计算机硬件信息 5、用户权限控制 6、NPOI导出数据到Excel 7、数据的条件筛选 ...... 这个demo比较适合新手参考、用到的知识点比较广、希望对新手有一点的帮助
1. 定义 2. 生活场景 3. 应用场景 4. 模式的优点和缺点 5. 饿汉式和懒汉式 6. 实现案例 7. 案例小结 1. 定义 2. 生活场景 3. 应用
3. 单例模式(Singleton) 4 4.建造者模式(Builder) 4 5. 原型模式(Protype) 5 6.适配器模式(Adapter) 6 7.装饰模式(Decorator) 6 8.代理模式(Proxy) 7 9.外观模式(Facade) 7 10.桥接模式(Bridge) 7 ...
1. 写法一(只适用于单线程环境) public sealed class Singleton1 { private Singleton1(){} private static Singleton1 instance = null;...写法一中的代码再多线程中会有问题。若两个线程同时判读instan