目录
饿汉单例模式
懒汉双锁单例模式
懒汉静态内部类单例模式
调用测试
输出结果
饿汉单例模式
/**
* 单例模式 饿汉式
* 线程安全,调用效率高,但是不能延时加载
*/
public class HungrySimpleInstance {
private HungrySimpleInstance(){
System.out.println("初始化 HungrySimpleInstance");
}
private static HungrySimpleInstance simpleInstance = new HungrySimpleInstance();
public static HungrySimpleInstance getSimpleInstance(){
return simpleInstance;
}
public String getName(){
return "饿汉单例模式:HungrySimpleInstance";
}
}
懒汉双锁单例模式
/**
* 单例模式 懒汉双锁式
*/
public class LazyLockSimpleInstance {
private LazyLockSimpleInstance(){
System.out.println("初始化 LazyLockSimpleInstance");
}
private static volatile LazyLockSimpleInstance simpleInstance;
public static LazyLockSimpleInstance getSimpleInstance(){
if (simpleInstance==null){
synchronized(LazyLockSimpleInstance.class){
if (simpleInstance==null){
simpleInstance = new LazyLockSimpleInstance();
}
}
}
return simpleInstance;
}
public String getName(){
return "懒汉双锁单例模式:LazyLockSimpleInstance";
}
}
懒汉静态内部类单例模式
/**
* 单例模式 懒汉静态内部类式
* 线程安全,调用效率高,可以延时加载
*/
public class LazyStaticClassSimpleInstance {
private LazyStaticClassSimpleInstance(){
System.out.println("初始化 LazyStaticClassSimpleInstance");
}
public static LazyStaticClassSimpleInstance getSimpleInstance(){
return LazyStaticClassSimpleInstanceHold.simpleInstance;
}
private static class LazyStaticClassSimpleInstanceHold{
private static final LazyStaticClassSimpleInstance simpleInstance = new LazyStaticClassSimpleInstance();
}
public String getName(){
return "懒汉静态内部类单例模式:LazyStaticClassSimpleInstance";
}
}
调用测试
public static void main(String[] args) throws InterruptedException, ExecutionException {
System.out.println(HungrySimpleInstance.getSimpleInstance().getName());
System.out.println(LazyLockSimpleInstance.getSimpleInstance().getName());
System.out.println( LazyStaticClassSimpleInstance.getSimpleInstance().getName());
}
输出结果
初始化 LazyLockSimpleInstance
懒汉双锁单例模式:LazyLockSimpleInstance
初始化 LazyStaticClassSimpleInstance
懒汉静态内部类单例模式:LazyStaticClassSimpleInstance