单例的实现大概有以下六种方式
1.懒汉式,线程不安全,不支持多线程。
package person.dolphin.singleton;
public class Singleton_one {
public static Singleton_one singleton;
private Singleton_one() {
}
public static Singleton_one getInstance() {
if (singleton == null) {
singleton = new Singleton_one();
}
return singleton;
}
}
2.懒汉式,线程安全,支持多线程
package person.dolphin.singleton;
public class Singleton_two {
public static Singleton_two singleton;
private Singleton_two() {
}
public static synchronized Singleton_two getInstance() {
if (singleton == null) {
singleton = new Singleton_two();
}
return singleton;
}
}
3.饿汉式
package person.dolphin.singleton;
public class Singleton_three {
public static Singleton_three singleton = new Singleton_three();
public Singleton_three() {
}
public static Singleton_three getInstance() {
return singleton;
}
}
4.双重校验锁
package person.dolphin.singleton;
public class Singleton_four {
private volatile static Singleton_four singleton;
private Singleton_four() {
}
public static Singleton_four getSingleton() {
if (singleton == null) {
synchronized (Singleton_four.class) {
if (singleton == null) {
singleton = new Singleton_four();
}
}
}
return singleton;
}
}
5.静态内部类
package person.dolphin.singleton;
public class Singleton_five {
private static class SingletonHolder {
private static final Singleton_five INSTANCE = new Singleton_five();
}
private Singleton_five() {
}
public static final Singleton_five getInstance() {
return SingletonHolder.INSTANCE;
}
}
6.枚举
package person.dolphin.singleton;
public enum Singleton_six {
INSTANCE
}