加油,新时代打工人!
简单粗暴,学习Java设计模式。
java
package mode;
/**
* @author wenhao
* @date 2024/02/19 09:38
* @description 单例模式--懒汉式 线程安全
* 是否 Lazy 初始化:是
* 是否多线程安全:是
* 这种方式具备很好的 lazy loading,能够在多线程中很好的工作,但是,效率很低,99% 情况下不需要同步。
* 优点:第一次调用才初始化,避免内存浪费。
* 缺点:必须加锁 synchronized 才能保证单例,但加锁会影响效率。
* getInstance() 的性能对应用程序不是很关键(该方法使用不太频繁)。
*/
public class SingleMode2 {
private SingleMode2() {
}
private static volatile SingleMode2 singleMode2;
public static SingleMode2 getInstance() {
if (singleMode2 == null) {
synchronized (SingleMode2.class){
if(singleMode2 ==null){
singleMode2 = new SingleMode2();
}
}
}
return singleMode2;
}
public static void main(String[] args) {
new Thread(() -> {
SingleMode2 instance1 = getInstance();
System.out.println(instance1);
}).start();
new Thread(() -> {
SingleMode2 instance2 = getInstance();
System.out.println(instance2);
}).start();
}
}
通过运行结果看,两个线程的地址值是相同的,说明内存空间里,创建了一个对象。