考虑线程安全的单例模式
方式一:
public class Singleton {
// 如果不加volatile,可能因为指令重排导致A线程正在初始化实例,B线程拿到了未赋值完全的实例。
private volatile static Singleton singleton;
private Singleton (){}
public static Singleton getSingleton() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
方式二(不推荐,锁竞争激烈):
public static synchronized Singleton getInstance() {
if (instanc == null ) {
instance = new Singleton();
}
return instance ;
}