volatile 关键字保证在初始化实例时,多个线程持有唯一的实例
1.4及其早期版本不适合这种方法
/**
* double-checked locking
*/
public class Singleton {
private volatile static Singleton uniqueInstance;
private Singleton() {
}
public static Singleton getInstance() {
if (uniqueInstance == null) {
synchronized (Singleton.class) {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}