单例模式 java 三种写法_单例模式基本类图

单例模式 java 三种写法_单例模式基本类图本文为joshua317原创文章,转载请注明:转载自joshua317博客Java单例模式推荐写法-双重检测机制实现单例模式-joshua317的博客Java单例模式推荐写法–双重检测机制实现单例双重检测机制不仅可以既线程安全问题,又解决懒加载问题,同时保证了效率。packagecom.joshua317.pattern;/***推荐使用:双重检测机制实现单例模式*既解决线程安全问题,又解决懒加载问题,同时保证了效率。*/publicclassSinglet.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

本文为joshua317原创文章,转载请注明:转载自joshua317博客 Java单例模式推荐写法-双重检测机制实现单例模式 – joshua317的博客

Java单例模式推荐写法–双重检测机制实现单例

双重检测机制不仅可以既线程安全问题,又解决懒加载问题,同时保证了效率。

package com.joshua317.pattern;

/**
 * 推荐使用:双重检测机制实现单例模式
 * 既解决线程安全问题,又解决懒加载问题,同时保证了效率。
 */
public class Singleton {
    /**
     * 定义静态属性使用volatile关键字
     * volatile关键字修饰变量来解决无序写入产生的问题,因为volatile关键字的一个重要作用是即使在多线程环境下,也可以禁止指令重排序,
     * 即保证不会出现内存分配、返回对象引用、初始化这样的顺序,从而使得双重检测真正发挥作用
     */
    private static volatile Singleton instance;
    private Singleton() {}

    public static Singleton getInstance()
    {
        //第1次判断,做一般性检查,但是有并发隐患:可能有多执行流同时进入改处
        if (instance == null) {
            /**
             * synchronized 关键字
             * 代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C)正在用这个方法(或者该类的其他同步方法),
             * 有的话要等正在使用synchronized方法的线程B(或者C)运行完这个方法后再运行此线程A,没有的话,锁定调用者,然后直接运行。
             * 它包括两种用法:synchronized 方法和 synchronized 块。
             *
             * 此处我们使用的是synchronized代码块
             * 当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,
             * 一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
             */
            synchronized(Singleton.class) {
                //第2次判断,为了防止后续多执行流并发时,后续获取同步锁的执行流,不会再次初始化Singleton对象
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

本文为joshua317原创文章,转载请注明:转载自joshua317博客 Java单例模式推荐写法-双重检测机制实现单例模式 – joshua317的博客

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169698.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 各大技术团队博客_如何扩大团队规模

    各大技术团队博客_如何扩大团队规模BAT技术团队博客1.美团技术团队博客: 地址: http://tech.meituan.com/2. 腾讯社交用户体验设计(ISUX)地址:http://isux.tencent.com/3. 京东设计中心地址:http://jdc.jd.com4. QQ游戏设计中心地址:ht

    2022年8月13日
  • qt scrollarea怎么用_Qt开发经验

    qt scrollarea怎么用_Qt开发经验Qt ScrollArea

    2022年4月21日
  • 错位排序公式_完全错位排列数

    错位排序公式_完全错位排列数首先,对于D(n),有1~n这样n个元素错排,所以对于第一个元素①,它现在可能的位置有(n-1)个,倘若它在第k个元素的位置上,对于第k个元素而言,它所在的位置就有两种可能—第一种,它处在非第一个元素①位置上,所以对于接下来的排列就相当于是n-1个元素的错排,即D(n-1);第二种,它处在第一个元素①的位置上,所以在排列D(n)中有两个元素找到了位置,那么接下来的队列就相当于是n-2个元素的错排。…

    2022年10月22日
  • JavaScript 高级程序设计(第3版)

    JavaScript 高级程序设计(第3版)内容简介ECMAScript5和HTML5在标准之争中双双胜出,使大量专有实现和客户端扩展正式进入规范,同时也为JavaScript增添了很多适应未来发展的新特性。《JavaScript高级程序设计(第3版)》这一版除增加5章全新内容外,其他章节也有较大幅度的增补和修订,新内容篇幅约占三分之一。全书从JavaScript语言实现的各个组成部分——语言核心、DOM、BOM、事件模…

    2022年8月20日
  • [LeetCode] Top K Frequent Elements 前K个高频元素

    [LeetCode] Top K Frequent Elements 前K个高频元素

    2022年3月12日
  • python unittest接口自动化测试实战_pytest测试框架从入门到精通

    python unittest接口自动化测试实战_pytest测试框架从入门到精通一、unittest工作原理unittest最核心的四部分是:TestCase,TestSuite,TestRunner,TestFixtureTestCase:用户自定义的测试case的基类,调用run()方法,会依次调用setUp方法、执行用例的方法、tearDown方法。TestSuite:测试用例集合,可以通过addTest()方法手动增加TestCase,也可以通过Test…

    2022年10月14日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号