首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

设计方式-Singleton pattern and Double-checked locking

2012-10-15 
设计模式--Singleton pattern and Double-checked locking1、定义《public class SingletonPatternA {privat

设计模式--Singleton pattern and Double-checked locking

1、定义

《public class SingletonPatternA {private static SingletonPatternA instance = new SingletonPatternA();private SingletonPatternA() {};public static SingletonPatternA getInstance() {return instance;}}

? 说明:

?? *在静态初始化器中创建单件,保证线程安全。

?? * 构造方法为私有

?

(2)使用延迟实例化

public class SingletonPatternB {private static SingletonPatternB uniqueInstance;private SingletonPatternB() {}public static synchronized SingletonPatternB getInstance() {if (uniqueInstance == null)uniqueInstance = new SingletonPatternB();return uniqueInstance;}}

?说明:

??? *利用静态变量

??? *构造方法为私有

??? *getInstance()存在着线程安全问题,所以要增加synchronized关键字。

?

3、由于synchronized getInstance() 同步一个方法可能使程序执行效率下降100倍,利用“double-checked locking”来减少getInstance()方法必须是sychronized的改进。

?

public class SingletonPatternC {private static volatile SingletonPatternC singleton;private SingletonPatternC() {}public static SingletonPatternC getInstance() {if (singleton == null) {synchronized (SingletonPatternC.class) {if (singleton == null) {singleton = new SingletonPatternC();}}}return singleton;}}

?注意:在1.4及更早版本的java中,许多JVM对volatile关键字的实现会导致"双重检查加锁"的失效,如果使用1.4及以下java版本请不要使用volatile关键字。

?

?