单例模式的懒汉式基于静态内部类的方式即兼顾了性能又保证了线程安全
一、示例代码:1、分别定义一个懒汉式基于静态内部类的类、线程类和测试类。
package com.rf.designPatterns.singleton.sttaicInnerClassSingleton;
/**
* @description: 静态内部类的单例模式
* @author: xiaozhi
* @create: 2020-05-22 21:24
*/
public class StaticInnerClassSingleton {
//私有的构造器,不被外部所访问
private StaticInnerClassSingleton(){}
//私有的静态内部类
private static class InnerClass{
//new一个私有的静态的StaticInnerClassSingleton对象
private static StaticInnerClassSingleton staticInnerClassSingleton=new StaticInnerClassSingleton();
}
//提供一个公用的对外暴露的方法
public static StaticInnerClassSingleton getInstance(){
//返回值为通过静态内部内调用静态成员
return InnerClass.staticInnerClassSingleton;
}
}
package com.rf.designPatterns.singleton.sttaicInnerClassSingleton;
/**
* @description: 多线程类
* @author: xiaozhi
* @create: 2020-05-22 21:31
*/
public class MyThread implements Runnable{
@Override
public void run() {
StaticInnerClassSingleton instance = StaticInnerClassSingleton.getInstance();
System.out.println(Thread.currentThread().getName()+": "+instance);
}
}
package com.rf.designPatterns.singleton.sttaicInnerClassSingleton;
/**
* @description: 测试类
* @author: xiaozhi
* @create: 2020-05-22 21:32
*/
public class Test {
public static void main(String[] args) {
Thread t1 = new Thread(new MyThread());
Thread t2 = new Thread(new MyThread());
t1.start();
t2.start();
System.out.println("end....");
}
}
2、分析图如下:
基于静态内部类的方式也也保证了线程的重排序问题
3、运行结果为,多个线程每次都会生成相同的对象,如下图: