Demo
public class HungrySingleton {
private static final HungrySingleton instance = new HungrySingleton();
private HungrySingleton(){
}
public static HungrySingleton getInstance(){
return instance;
}
}
public enum EnumSingleleton {
INSTANCE;
public void doSomething(){
System.out.println("do somthing");
}
public static void main(String[] args) {
EnumSingleleton.INSTANCE.doSomething();
}
}
public class DoubleCheckSingletion {
private static volatile DoubleCheckSingletion instance;
private DoubleCheckSingletion(){
System.out.println("初始化");
}
public static DoubleCheckSingletion getInstance(){
if (null == instance) {
synchronized (DoubleCheckSingletion.class){
if (null == instance) {
instance = new DoubleCheckSingletion();
}
}
}
return instance;
}
public static void main(String[] args) {
DoubleCheckSingletion instance = DoubleCheckSingletion.getInstance();
DoubleCheckSingletion instance2 = DoubleCheckSingletion.getInstance();
System.out.println(instance == instance2);
}
}
public class InnerClassSingleton {
private static class Holer {
private static InnerClassSingleton instance = new InnerClassSingleton();
}
private InnerClassSingleton() {
System.out.println("初始化");
}
public static InnerClassSingleton getInstance() {
return Holer.instance;
}
public static void main(String[] args) {
InnerClassSingleton instance = InnerClassSingleton.getInstance();
InnerClassSingleton instance2 = InnerClassSingleton.getInstance();
System.out.println(instance == instance2);
}
}
public class HungrySingleton implements Serializable {
private static final HungrySingleton instance = new HungrySingleton();
private HungrySingleton(){
}
public static HungrySingleton getInstance(){
return instance;
}
public Object readResolve(){
return instance;
}