方法一:饿汉模式
package com.offer.offer01;
/**
* @author zth
* @Date 2019-07-27 15:41
* 饿汉模式
*/
public class HugerSingleton {
private HugerSingleton(){}
private static final HugerSingleton singleton = new HugerSingleton();
public static HugerSingleton getInstance(){
return singleton;
}
}
方法二:静态内部类
package com.offer.offer01;
/**
* @author zth
* @Date 2019-07-27 16:00
* 内部类实现单例模式
*/
public class Singleton_static_innerClass {
private static class SingletonHolder{
private static final Singleton_static_innerClass instance = new Singleton_static_innerClass();
}
public static Singleton_static_innerClass getInstance(){
return SingletonHolder.instance;
}
private Singleton_static_innerClass(){}
}
方法三:双重检查锁机制
package com.offer.offer01;
/**
* @author zth
* @Date 2019-07-27 16:20
*/
public class Singleton_DoubleChick {
private Singleton_DoubleChick(){}
public static Singleton_DoubleChick instance;
public static Singleton_DoubleChick getInstance(){
if (null== instance){
synchronized (Singleton_DoubleChick.class){
if (null == instance){
instance = new Singleton_DoubleChick();
}
}
}
return instance;
}
}