以下是double-checked locking的java代码:
public class Singleton {
private Singleton instance = null;
public static Singleton getInstance() {
if (instance == null) {
synchronized(this) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
但double-check在J2SE 1.4或早期版本在多线程或者JVM调优时由于out-of-order writes,是不可用的。
这个问题在J2SE 5.0中已经被修复,可以使用volatile关键字来保证多线程下的单例。
public class Singleton {
private volatile Singleton instance = null;
public Singleton getInstance() {
if (instance == null) {
synchronized(this) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
推荐方法是Initialization on Demand Holder(IODH),详见
http://en.wikipedia.org/wiki/Initialization_on_demand_holder_idiom
public class Singleton {
static class SingletonHolder {
static Singleton instance = new Singleton();
}
public static Singleton getInstance(){
return SingletonHolder.instance;
}
}
分享到:
相关推荐
DataSource的单态模式(SingleTon)程序---马克-to-win java视频 数据源 单态模式 dataSource Singleton
java Singleton单例模式 java Singleton单例模式
perl-Class-Singleton-1.4-6.el6.noarch.rpm perl-Class-Singleton-1.4-6.el6.noarch.rpm
python库。 资源全名:django-singleton-admin-0.0.2.macosx-10.7-intel.exe
Java的Singleton模式代码(免资源分),你会发现Java的Singleton模式真的很有趣,原来程序还可以这样写。
Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)
简单的单例模式举例Singleton 分为恶汉式 懒汉式
Singleton模式包含的角色只有一个,就是Singleton。Singleton拥有一个私有构造函数,确保用户无法通过new直接实例化它。除此之外,该模式中包含一个静态私有成员变量instance与静态公有方法Instance()。Instance()...
java singleton 不解释不解释不解释不解释
单态模式 马克-to-win Java视频 Singleton 单例模式
单态模式 马克-to-win java视频 Singleton 单例模式
单态模式 马克-to-win java视频 Singleton 单例模式
C++完美实现Singleton模式
离线安装包,亲测可用
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,亲测可用
一个java线程安全的单例模式:饥饿模式和延迟加载