单例模式有很多种,饿汉式,懒汉式,双检锁,公司里大部分都是选择了双检锁,其中sentinel的ContextUtil源码里就有相关的实现:

 protected static Context trueEnter(String name, String origin) {Context context = contextHolder.get();if (context == null) {Map<String, DefaultNode> localCacheNameMap = contextNameNodeMap;DefaultNode node = localCacheNameMap.get(name);if (node == null) {if (localCacheNameMap.size() > Constants.MAX_CONTEXT_NAME_SIZE) {setNullContext();return NULL_CONTEXT;} else {try {LOCK.lock();node = contextNameNodeMap.get(name);if (node == null) {if (contextNameNodeMap.size() > Constants.MAX_CONTEXT_NAME_SIZE) {setNullContext();return NULL_CONTEXT;} else {node = new EntranceNode(new StringResourceWrapper(name, EntryType.IN), null);// Add entrance node.Constants.ROOT.addChild(node);Map<String, DefaultNode> newMap = new HashMap<>(contextNameNodeMap.size() + 1);newMap.putAll(contextNameNodeMap);newMap.put(name, node);contextNameNodeMap = newMap;}}} finally {LOCK.unlock();}}}context = new Context(node, name);context.setOrigin(origin);contextHolder.set(context);}return context;}

上述代码使用了双检锁,lock后进行再判断,可以很好的防止多并发问题。

sentinel里的双检锁相关推荐

  1. 单例模式:懒汉式 饿汉式 双检锁 登记式 枚举式 详细讲解

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该类负责创建自己的对 ...

  2. Java的懒汉式双检锁单例模式

    Java的懒汉式双检锁单例模式 文章目录 Java的懒汉式双检锁单例模式 一. 实现一个双检锁 二. 为什么线程不安全 三. 关于指令重排序 四. 关于原子操作 五. 实现线程安全的双检锁 首先回忆一 ...

  3. 单例模式(懒汉模式-双检锁、饿汉模式、静态内部类模式)-详细

    文章目录 前言 单例模式(懒汉模式-双检锁.饿汉模式.静态内部类模式)-详细 01 单例模式是什么? 02 单例模式的好处? 03 单例模式的三种模式 03::01 懒汉模式 03::01::01 问 ...

  4. DCL双检查锁机制实现线程安全的单例设计模式

    实现线程安全的单例设计模式的三种方式: DCL双检查锁机制实现线程安全 使用静态内置类实现线程安全 使用static代码块实现线程安全 -------------------------------- ...

  5. 【IEEE】中科院2区计算机系统类,SCIEEI双检,正刊

    计算机系统类 [期刊简介]IF:4.5-5.0,JCR2区,中科院2区 [检索情况]SCIE&EI 双检,正刊 [参考周期]3个月左右录用 [截稿日期]10篇版面 [征稿领域]为计算性社会系统 ...

  6. 【新刊邀稿】计算机视觉图像类,SCIEI双检,正刊,进展顺利

    视觉图像类 [期刊简介]IF:0.5-1.0,JCR4区,中科院4区 [检索情况]SCI&EI 双检,正刊 [参考周期]3个月左右录用 [截稿日期]10篇版面 [征稿领域]有关计算机视觉和成像 ...

  7. html锁别人电脑的程序,教大家怎么把电脑里的个别软件锁住

    近日有关于怎么把电脑里的个别软件锁住的问题受到了很多网友们的关注,大多数网友都想要知道怎么把电脑里的个别软件锁住的具体情况,那么关于到怎么把电脑里的个别软件锁住的相关信息,小编也是在网上进行了一系列的 ...

  8. 国产汽车级双极锁存霍尔传感器CHA44X介绍

    CHA44X是一系列符合AEC-Q100 汽车认证的数字双极锁存霍尔传感器产品,其主要性能及特点如下: • AEC-Q100汽车认证 • 数字双极锁存霍尔传感器 • 多种灵敏度选项(BOP / BRP ...

  9. 整理CSCD和CSD双检期刊

    整理CSCD和CSD双检期刊 运行结果 源代码: import xlrd import xlwt import time#open the .xls file # xlsname="CSD. ...

最新文章

  1. 查询提升200倍,ClickHouse你值得拥有!
  2. 源码推荐:基于uni-app前端框架,开源版本还开源免费商用
  3. makefile 常用函数
  4. php 字符串表示,php字符串是否包含某字符串
  5. 8G的U盘轻松帮助你安装win7/win8/win10/xp系统
  6. 自动登录126邮箱的脚本
  7. 数据结构(Data structures)(二):结构体指针
  8. TCP三次握手建立连接
  9. 反射 数据类型_C#扫盲篇(一):反射机制情真意切的说
  10. 三星Galaxy S22系列快充规格曝光:只可比肩iPhone 13Pro Max
  11. django请求和响应
  12. 织梦5.7 10万新闻文章 生成测试
  13. Azure 托管镜像和非托管镜像对比
  14. [C++]踩坑日记:内存别名
  15. 图像配准系列之基于FFD形变与LM算法的图像配准
  16. 三大运营商布局金融的套路不同,还能否搭上移动支付的快车?
  17. 互联网裁员形势严峻,2019年程序员的发展空间还有多大?
  18. 创建windows虚拟机详细教程
  19. c语言教学方法措施,C语言教学对策
  20. 论文笔记:SubRank: Subgraph Embeddings via a Subgraph Proximity Measure2020PAKDD

热门文章

  1. labview连接mysql数据库_labview使用DSN与数据库的连接包括access,mysql
  2. 2013百度校园招聘-机器学习和数据挖掘工程师-笔试题
  3. 数据结构课程设计---最长公共子串
  4. Fire Net HDU1045
  5. 解决webpack打包后-webkit-box-orient: vertical ;消失问题
  6. jsp 记录1 bs/cs
  7. 图解集合8:红黑树的移除节点操作
  8. iOS判断是模拟器还是真机
  9. 实现Evernote的OAuth授权
  10. hibernate.cfg.xml 配置(摘录)