1、饿汉式,线程安全 但效率比较低
public class Singleton0 {
/**
* 定义私有构造方法(防止通过 new SingletonTest()去实例化)
*/
private Singleton0() {
}
private final static Singleton0 instance = new Singleton0();
public static Singleton0 getInstance() {
return instance;
}
}
2、只适用于单线程环境,饱汉式,非线程安全 。
public class Singleton1 {
/**
* 将构造方法设置成私有的,禁止他人创建实例。
*/
private Singleton1() {
}
private static Singleton1 instance;
public static Singleton1 getInstance() {
if (instance == null) {
instance = new Singleton1();
}
return instance;
}
}
3、适用于多线程环境,饱汉式,线程安全简单实现
public class Singleton2 {
private Singleton2() {
}
private static Singleton2 instance;
public static synchronized Singleton2 getInstance() {
if (instance == null) {
instance = new Singleton2();
}
return instance;
}
}
4、加同步锁之后两次判断实例是否存在,内存占用小,效率高,线程安全,多线程操作原子性。
public class Singleton3 {
private Singleton3() {
}
private static Singleton3 instance;
public static Singleton3 getInstance() {
if (instance == null) {
synchronized (Singleton3.class) {
if (instance == null) {
instance = new Singleton3();
}
}
}
return instance;
}
}
5、实现按需创建实例。
public class Singleton4 {
private Singleton4() {
}
public static synchronized Singleton4 getInstance() {
return SingleHolder.instance;
}
private static class SingleHolder {
private static Singleton4 instance = new Singleton4();
}
}