目录

​​饿汉单例模式​​

​​懒汉双锁单例模式​​

​​懒汉静态内部类单例模式​​

​​调用测试​​

​​输出结果​​


饿汉单例模式

/**
* 单例模式 饿汉式
* 线程安全,调用效率高,但是不能延时加载
*/
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