饿汉式
public class SingletonPattern01 {
private static SingletonPattern01 singletonPattern01 = new SingletonPattern01();
private SingletonPattern01(){
}
public static SingletonPattern01 getInstance(){
return singletonPattern01;
}
}
懒汉式第一版
public class SingletonPattern02 {
private static volatile SingletonPattern02 singletonPattern02;
private SingletonPattern02(){
}
public static SingletonPattern02 getInstance(){
if (singletonPattern02 != null){
synchronized (SingletonPattern02.class){
if (singletonPattern02 != null){
singletonPattern02 = new SingletonPattern02();
}
}
}
return singletonPattern02;
}
}
懒汉式第二版
public class SingletonPattern03 {
private static volatile SingletonPattern03 singletonPattern03;
private SingletonPattern03(){
if (singletonPattern03 != null){
throw new RuntimeException("请不要使用反射创建对象");
}
}
public static SingletonPattern03 getInstance(){
if (singletonPattern03 != null){
synchronized (SingletonPattern03.class){
if (singletonPattern03 != null){
singletonPattern03 = new SingletonPattern03();
}
}
}
return singletonPattern03;
}
}
懒汉式第三版
public class SingletonPattern04 {
private static volatile SingletonPattern04 singletonPattern04;
private static boolean hs = false;
private SingletonPattern04(){
if (hs){
throw new RuntimeException("请不要使用反射创建对象");
}else {
hs = true;
}
}
public static SingletonPattern04 getInstance(){
if (singletonPattern04 != null){
synchronized (SingletonPattern04.class){
if (singletonPattern04 != null){
singletonPattern04 = new SingletonPattern04();
}
}
}
return singletonPattern04;
}
}