/**
* @author 苏雪夜酒
* @version 1.0
* @date 2022/4/30 17:56
*/
public class SingleSlacker {
public static void main(String[] args) {
//创建30个线程
for (int i = 0; i < 30; i++) {
new Thread(()->{
Slacker slacker = Slacker.getInstance();
System.out.println(Thread.currentThread().getName()+ "===" + slacker);
}).start();
}
}
}
class Slacker{
//构造方法私有化
private Slacker(){};
//成员变量私有化 且禁止指令重排 原因: slacker = new Slacker();
//上面一行代码分三步,分配内存空间、初始化、变量指向内存地址
private static volatile Slacker slacker;
public static Slacker getInstance(){
//双重非空检查,提高效率,实现多个线程,只加锁一次
if (slacker == null){
//添加同步锁,避免多线程出问题
synchronized (SingleSlacker.class){
if (slacker == null){
slacker = new Slacker();
}
}
}
return slacker;
}
}
单例模式之懒汉式
该博客探讨了Java编程中实现线程安全单例模式的方法,通过双重检查锁定(Double-Checked Locking)确保在多线程环境下正确初始化实例,避免资源浪费和并发问题。代码示例展示了如何在`Slacker`类中使用静态 volatile 变量和同步锁来保证单例的唯一性。
摘要由CSDN通过智能技术生成