单例模式设计(二)

简介: 根据上面的 "懒汉模式" 和 "饿汉模式"。我们可以知道,懒汉模式,它只是负责读取,没有修改。而 " 饿汉模式 " 是既读取,也进行修改。所以来说, "懒汉模式" 是线程安全的, "饿汉模式" 是线程不安全的。

懒汉模式优化

根据上面的 "懒汉模式" 和 "饿汉模式"。我们可以知道,懒汉模式,它只是负责读取,没有修改。而 " 饿汉模式 " 是既读取,也进行修改。所以来说, "懒汉模式" 是线程安全的, "饿汉模式" 是线程不安全的。


所以为了使 " 饿汉模式" 线程安全,我们做以下几步操作:


1. 进行加锁:怎么加呢???


我们应该给整个 if 语句进行加锁,防止两个线程同时调用的时候都为 null ,从而就实例化了两个。


//懒汉模式优化
public class Demo3 {
    private static volatile Demo3 instance = null;
    //获取这个实例
    public static Demo3 getInstance() {
            synchronized (Demo3.class) {
                if (instance == null) {
                    instance = new Demo3();
                }
            }
        return instance;
    }
    //把构造方法设置为私有 外部不能 new 这个类对象
    private Demo3(){}
}


2. 线程安全是解决了,但是呢?


我们会发现,后续我们每次调用 getInstance() 的时候,都必须进行加锁一次,我们也没必要每次都加锁(加锁其实也是很大的开销,可能会使好多线程阻塞等待,影响了效率),当不为 null 的时候,就不用加锁了,这样就迎刃而解了~~~

//懒汉模式优化
public class Demo3 {
    private static volatile Demo3 instance = null;
    //获取这个实例
    public static Demo3 getInstance() {
        if (instance == null) {
            synchronized (Demo3.class) {
                if (instance == null) {
                    instance = new Demo3();
                }
            }
        }
        return instance;
    }
    //把构造方法设置为私有 外部不能 new 这个类对象
    private Demo3(){}
}


目录
相关文章
|
4月前
|
设计模式 安全 测试技术
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
114 0
|
4月前
|
设计模式 缓存 安全
【设计模式】单例模式:确保类只有一个实例
【设计模式】单例模式:确保类只有一个实例
43 0
|
11月前
|
设计模式 安全 Java
特殊类设计及单例模式(C++)
特殊类设计及单例模式(C++)
72 1
|
3月前
|
设计模式 缓存 安全
Java设计模式的单例模式应用场景
Java设计模式的单例模式应用场景
41 4
|
4月前
|
设计模式 安全 Java
软件设计模式:单例模式
软件设计模式:单例模式
|
3月前
|
设计模式 SQL 安全
Java设计模式:单例模式之六种实现方式详解(二)
Java设计模式:单例模式之六种实现方式详解(二)
|
4月前
|
设计模式
【设计模式】单例模式的三种实现方式
【设计模式】单例模式的三种实现方式
27 1
|
12月前
单例模式设计(一)
饿汉模式 由名字我们就可以知道 "饿汉" 嘛,就比较急切,在类加载的时候就创建实例: 1. 写一个类,在本类中构造实例,用static修饰,直接创建出来(提供一个现有的实例) 2. 在本类中写一个方法获取到上面的实例 3. 将这个类的构造方法设置为私有的,让外部不能 new 这个对象
58 0
|
设计模式 存储 安全
Java设计模式:深入探讨饿汉式单例模式
当谈到Java设计模式时,"单例模式"是一个必不可少的主题。在这篇文章中,我们将深入探讨单例模式的一种常见实现方式——"饿汉式"。我们将了解什么是饿汉式单例模式,为什么选择它,以及如何在Java中实现。
250 0
|
设计模式 安全 编译器
设计模式之单例模式(懒汉, 饿汉)
设计模式之单例模式(懒汉, 饿汉)
168 0
设计模式之单例模式(懒汉, 饿汉)