1、饿汉式
public class SingletonHungry {
private SingletonHungry () {
}
private static SingletonHungry singletonHungry = new SingletonHungry();
public static SingletonHungry getInstance(){
return singletonHungry;
}
}
2、懒汉式
public class SingletonLazy {
private static SingletonLazy singletonLazy;
private SingletonLazy () {
/**
* 防止被反射强行创建实例
*/
if(singletonLazy != null) {
throw new UnsupportedOperationException("SingletonLazy was created!");
}
}
public static SingletonLazy getInstance() {
if(singletonLazy == null) {
try {
singletonLazy = new SingletonLazy();
return singletonLazy;
} catch (Exception e) {
e.printStackTrace();
}
}
return singletonLazy;
}
}
3、双锁
public class SingletonLock {
private static SingletonLock singletonLock;
private SingletonLock() {
}
public static SingletonLock getInstance() {
if(singletonLock == null) {
synchronized (SingletonLock.class) {
if(singletonLock == null) {
singletonLock = new SingletonLock();
return singletonLock;
}
}
}
return singletonLock;
}
}
4、内部类
public class SingletonInner {
private SingletonInner() {
if (Holder.INSTANCE != null) {
throw new UnsupportedOperationException("INSTANCE was created!");
}
}
static class Holder {
private static SingletonInner INSTANCE = new SingletonInner();
}
public static SingletonInner getInstance() {
return Holder.INSTANCE;
}
}
5、枚举
public enum SingletonEnum{
INSTANCE;
}