1.lazy instantiaze 懒汉式(线程非安全)
public class Singleton {
private static Singleton instance = null;
private Singleton(){}
/**
* lazy instantiaze 懒汉式
* */
public static Singleton getInstance() {
if (instance == null)
instance = new Singleton();
return instance;// == null ? new Singleton() : instance;
}
}
2.lazy instantiaze 懒汉式(线程安全)
public class Singleton {
private static Singleton instance = null;
private Singleton(){}
/**
* lazy instantiaze 懒汉式
* */
public static synchronized Singleton getInstance() {//加同步锁,但是每次想要得到实例的时候都要同步,降低了效率
if (instance == null)
instance = new Singleton();
return instance;// == null ? new Singleton() : instance;
}
}
3.eagerly 饥汉式
class Singleton2 {
private static Singleton2 instance = new Singleton2();
private Singleton2(){}
/**
* eagerly 饥汉式
* */
public Singleton2 getInstance() {
return instance;
}
}
4.double-checked locking: 双重检查加锁
class Sington3 {
private static Sington3 instance;
private Sington3(){}
/**
* double-checked locking: 双重检查加锁
* */
public static Sington3 getInstance() {
if (instance == null) {
synchronized (Sington3.class) {
if (instance == null)
instance = new Sington3();
}
}
return instance;
}
}