关于singleton的双重检查问题,这样能不能解决?
换了工作,最近学习java,在java与模式的书中提到singleton模式的双重检查不成立,
class Singleton
{
private Singleton instance;
public static Singleton get_instance()
{ if( instance == null )
{ synchronized( Std.class )
{ if( instance == null )
instance = new Singleton();
}
}
return instance;
}
}
意思是当执行instance = new Singleton();的时候,可能会发生instance的值已经指向一个正确的句柄(地址?),但是构造函数还未执行。这是其他线程异步判断instance!=null就通过了,结果可能访问并没有初始化完全的对象。
书中提到的信息比较少,最后结论不使用这种方式来做(用饿汉式)。但是这个问题不仅仅在于singleton模式,另外一些可能涉及此的线程安全性问题也可能存在。但是我不知道我这样做是否能够解决这个问题:
public static Singleton get_instance()
{
if( instance == null )
{ synchronized( Std.class )
{
if( instance == null )
{
Singleton tmpInst = new Singleton();
instance = tmpInst;// 应该已经建立完全。
}
}
}
return instance;
}
我对java一些底层的东西不熟,希望哪位高手能够帮我看看这样会不会导致其他的问题?
...全文
相关推荐
Java中的双重检查(Double-Check)详解
主要为大家详细介绍了Java中的双重检查(Double-Check),感兴趣的小伙伴们可以参考一下
Java双重检查加锁单例模式的详解
今天小编就为大家分享一篇关于Java双重检查加锁单例模式的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
C++完美实现Singleton模式
C++完美实现Singleton模式
java双重检查锁定的实现代码
主要介绍了java双重检查锁定的实现方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
singleton demo
了解singleton实现方式不比了解应用场合实在



