单例模式 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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • css中100vh 加减运算[通俗易懂]

    css中100vh 加减运算[通俗易懂]vh/vwvh:相对于视窗的高度,视窗被均分为100单位的vh;vw:相对于视窗的宽度,视窗被均分为100单位的vw;vmax:相对于视窗的宽度或高度中较大的那个。其中最大的那个被均分为100单位的vmax;vmin:相对于视窗的宽度或高度中较小的那个。其中最小的那个被均分为100单位的vmin;视区所指为浏览器内部的可视区域大小,即window.innerWidth/window.innerHeight大小,不包含任务栏标题栏以及底部工具栏的浏览器区域大小。calcca…

    2022年5月5日
    56
  • django和drf_类的序列化

    django和drf_类的序列化前言上一篇文章我们讲述了序列化,这篇就带大家一起来实现以下序列化Serializer我们使用序列化类Serializer,我们来看下源码结构,这里推荐使用pycharm左边导航栏的Structu

    2022年7月30日
    9
  • js判断字符串_js中判断字符串包含另一个字符串

    js判断字符串_js中判断字符串包含另一个字符串1.string.search()返回值:匹配成功的第一个字符的下标,未匹配则返回-1用法:string.search(searchValue)举个例子:letsearchVal=’yyds’letsearchResult=searchVal.search(‘y’)console.log(searchResult)//03.string.includes()返回值:Boolean用法:string.includes(searchValue,start)

    2022年10月7日
    5
  • pycharm改字体的大小_pycharm设置字体颜色

    pycharm改字体的大小_pycharm设置字体颜色①代码块的字体大小设置点击左上角file然后选择settings下一步双击打开点击Font②run窗口的字体大小与颜色设置run窗口颜色设置

    2022年8月25日
    9
  • html遮罩层样式,遮罩层样式

    .shade{width:100%;height:100%;position:absolute;top:0px;left:0px;z-index:5000;background:#000;opacity:0.7;}要遮罩的内容中还有下拉框,不用iframe的话,盖不住下拉框。使用了宽和高都为100%的iframe后,用了后会导致背景色和文字颜色等失效。//隐藏sele…

    2022年4月13日
    124
  • 对知识推理的认识的相关论文

    对知识推理的认识的相关论文​论文一()中文引用格式:官赛萍,靳小龙,贾岩涛,王元卓,程学旗.面向知识图谱的知识推理研究进展.软件学报,2018,29(10):29662994.http://www.jos.org.cn/1000-9825/5551.htm1.1知识推理的简介面向知识图谱的知识推理旨在基于已有的知识图谱事实,推理新的事实或识别错误知识。例如,在DBpedia中已知三元组(X,birthPlace,Y),可以在很大程度上推理出缺失的三元组(X,nationality,Y)。主要分为:

    2022年6月5日
    33

发表回复

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

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