B , , _instance != null , , , .
, , , .
: , volatile, , , ( , ), .
Java , . ,
- (JLS 17.4.5)
- (JLS 12.4)
- volatile (JLS 17.4.5) , AtomicX
- (JLS 17.5).
( , ) - , ( ), JVM:
class Singleton
{
private static final Singleton HIGHLANDER = new Singleton();
private Singleton() { }
public static getSingleton() { return HIGHLANDER; }
}
JDK "Holder" , :
class Singleton
{
private Singleton() { }
private static Class LazyHolder {
private static final Singleton LAZY_HIGHLANDER = new Singleton();
}
public static Singleton getInstance() {
return LazyHolder.LAZY_HIGHLANDER;
}
}
volatile ( DCL) ( JVM, ).