首页 > 其他分享 >双检锁(DCL)实现懒汉单例模式

双检锁(DCL)实现懒汉单例模式

时间:2023-05-19 10:55:21浏览次数:36  
标签:Singleton synchronized DCL 双检锁 实例 线程 单例 volatile

public class Singleton{
    private volatile static Singleton obj;
    public Singleton(){}
    public getSingleton(){
        if(singleton == null){
            synchronized(Singleton.class){
                if(singleton == null){
                    obj = new Singleton();
                }
            }
        }
        return obj;
    }
}
  • 为什么使用两次if判断?
    因为多线程环境下只有创建单例对象时才会产生竞争。如果已经有实例化对象,则不需要进入加锁的步骤,直接返回,提高效率。第二次判断是防止创建出多个实例,多个线程进入第一个if时,一个线程释放了锁,其他线程会获取锁,从而导致多个实例创建,第二个if就是为了避免创建多个实例。
  • 为什么使用了synchronized关键字还要使用volatile关键字?
    synchronized是为了保证多线程环境下的线程安全,而volatile是为了禁止指令重排。

标签:Singleton,synchronized,DCL,双检锁,实例,线程,单例,volatile
From: https://www.cnblogs.com/tyhA-nobody/p/17414289.html

相关文章

  • python - 单例模式
    Python中的单例单例模式(Singletonpattern),是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的一个类只有一个实例。即一个类只有一个对象实例。Python中实现单例的几种方法:使用模块使用函数装饰器使用类装饰器......
  • python:ERROR: Could not build wheels for wordcloud, which is required to install
    pycharm里无法下载,在下面下载出现问题 需要下载error里的文件https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud这个网站找。输入Python,看自己电脑是怎样的 下载文件后,放到对应位置,下载成功 ......
  • QT6 环境搭建和简单例子
    环境搭建$python-VPython3.9.16QT6需要Python3.7+以上版本。$python-mvenvenvqt6在这个命令中,参数-m表示执行模块的方式。它告诉Python解释器以模块的方式执行后面提供的参数。venv是一个Python模块,用于创建和管理虚拟环境。当你运行python-mv......
  • QT5 环境搭建和简单例子
    环境搭建$python-VPython3.9.16QT5需要Python3.7以上版本。$python-mvenvenvqt5在这个命令中,参数-m表示执行模块的方式。它告诉Python解释器以模块的方式执行后面提供的参数。venv是一个Python模块,用于创建和管理虚拟环境。当你运行python-mve......
  • 单例模式
    1.饿汉式:在类加载时创建对象,不支持延时加载 2.懒汉模式支持延时加载 ......
  • 不是单例的单例——巧用ClassLoader
    本文通过如何将一个单例类实例化两次的案例,用代码实践来引入Java类加载器相关的概念与工作机制。理解并熟练掌握相关知识之后可以扩宽解决问题的思路,另辟蹊径,达到目的。背景单例模式是最常用的设计模式之一。其目的是保证一个类在进程中仅有一个实例,并提供一个它的全局访问......
  • 单例模式
    单列模式一、静态引用变量直接实力例化对象随着类装载就完成实例化二、使用代码块,和一一样三、懒汉式加载前两个是类装载就完成实例化,不是当需要调用的时候才实例化四、三的改进,加锁避免线程安全的问题,但是耗时,不高效五、用静态代码块缩小锁的范围,但是还是会出现线程的......
  • MySQL-----DCL数据控制语言
    MySQL-----DCL数据控制语言用来管理数据库用户,控制数据库的访问权限用户管理查询用户USEmysql;SELECT*FROMuser;创建用户CREATEUSER'用户名'@'主机名'IDENTIFIEDBY'密码';修改用户密码ALTERUSER'用户名'@'主机名'IDENTIFIEDWITHmysql_native_passwordBY�......
  • Java设计模式【单例模式】
    Java设计模式【单例模式】单例模式单例模式(SingletonPattern)是一种创建型设计模式,其主要目的是确保一个类只有一个实例,并提供对该实例的唯一访问点。优缺点优点:提供了对唯一实例的受控访问。由于在系统内存中只存在一个对象,因此可以节约系统资源。缺点:单例类的......
  • Go源码阅读——github.com/medcl/esm —— v0.go
    esm(AnElasticsearchMigrationTool)——v0.gohttps://github.com/medcl/esmrelease:8.7.1通过阅读好的源代码,细致思考,理性分析并借鉴优秀实践经验,提高zuoyang的编程水平,所谓"他山之石,可以攻玉" 该是如此吧。 /*Copyright2016Medcl(mATmedcl.net)Licensedun......