A Double-Checked Locking Error in JDK

我昨天在使用javax.xml.bind.DatatypeConverter这个类的时候发现,它内部隐藏了一个Singleton的实现,而且是有问题的。

代码大概如下:

final public class DatatypeConverter {

    // delegate to this instance of DatatypeConverter
    private static DatatypeConverterInterface theConverter = null;  
    private static synchronized void initConverter() {
        theConverter = new DatatypeConverterImpl();
    }
    public static String parseString( String lexicalXSDString ) {
        if (theConverter == null) initConverter();
        return theConverter.parseString( lexicalXSDString );
    }
}

其中,theConverter这个变量在声明的时候没有加上volatile修饰符。

参考:《The "Double-Checked Locking is Broken" Declaration》

此博客中的热门博文

在windows下使用llvm+clang

少写代码,多读别人写的代码

tensorflow distributed runtime初窥