当前位置: 首页 > news >正文

系统设计 --- 双重检查锁定

系统设计 --- 双重检查锁定

双重检查锁定(Double-Checked Locking,DCL) 是一种在并发情况下确认某一变量状态的方法。其核心思想是:在加锁前后各检查一次变量,避免错误操作

public class MyClass {class myVarpublic static void check() {// 第一次检查:不加锁   if (myVar满足条件) {  				               // 加锁synchronized (myVar.class) {// 第二次检查:加锁后     if (myVar满足条件) {          //执行操作}}}}
}

经典使用场景

  1. 延迟初始化,如单例类中
//Java代码
public class Singleton {private static volatile Singleton instance; // 注意 volatile 关键字public static Singleton getInstance() {if (instance == null) {                  // 第一次检查:不加锁synchronized (Singleton.class) {     // 加锁if (instance == null) {          // 第二次检查:加锁后instance = new Singleton();  // 初始化}}}return instance;}
}
  1. 状态标志更新
//C# 代码
public class ConnectionManager
{private volatile ConnectionState _state = ConnectionState.Disconnected;private readonly object _stateLock = new object();public void Connect(){if (_state == ConnectionState.Connected) return;lock (_stateLock){// 第二次检查(可能有其他线程已链接)if (_state == ConnectionState.Connected) return;// 执行连接操作EstablishConnection();StartHeartbeat();_state = ConnectionState.Connected;}}
}
  1. 线程安全的缓存实现
public class ThreadSafeCache<TKey, TValue>
{private readonly Dictionary<TKey, TValue> _cache = new Dictionary<TKey, TValue>();private readonly object _lock = new object();public TValue GetOrAdd(TKey key, Func<TKey, TValue> valueFactory){// 第一次检查(无锁)if (_cache.TryGetValue(key, out var value)){return value;}lock (_lock){// 第二次检查(可能有其他线程已添加)if (!_cache.TryGetValue(key, out value)){value = valueFactory(key); // 可能耗时的创建过程_cache[key] = value;}return value;}}
}
http://www.lryc.cn/news/587171.html

相关文章:

  • 前端基础知识TypeScript 系列 - 04(TypeScript 中接口的理解)
  • 深度学习图像分类数据集—角膜溃疡识别分类
  • php生成二维码
  • 人工智能之数学基础:神经网络的矩阵参数求导
  • ABP VNext + 多级缓存架构:本地 + Redis + CDN
  • Redis集群方案——哨兵机制
  • 前端工程化-构建打包
  • Java 8 异步编程和非阻塞操作工具 CompletableFuture
  • DVWA CSRF漏洞分析与利用
  • C语言---自定义类型(上)(结构体类型)
  • 更换docker工作目录
  • 4. 关于CEF3 使用的一些记录及仓颉端封装的情况
  • [2025CVPR]DenoiseCP-Net:恶劣天气下基于LiDAR的高效集体感知模型
  • Android事件分发机制完整总结
  • 《Python JSON 数据解析全指南:从基础到实战(含 jsonpath 与 Schema 验证)》
  • 002大模型基础知识
  • Opencv---blobFromImage
  • Llama系列:Llama1, Llama2,Llama3内容概述
  • 互联网大厂Java面试:从Spring Boot到微服务的场景应用
  • RHCIA第二次综合实验:OSPF
  • anaconda常用命令
  • 动态规划理论基础,LeetCode 509. 斐波那契数 LeetCode 70. 爬楼梯 LeetCode 746. 使用最小花费爬楼梯
  • 编译器优化——LLVM IR,零基础入门
  • 基础数论学习笔记
  • 每天学习一个Python第三方库之jieba库
  • vue中 js-cookie 用法
  • 深度学习算法:开启智能时代的钥匙
  • DVWA靶场通关笔记-XSS DOM(High级别)
  • 详解缓存淘汰策略:LFU
  • 初级网安作业笔记1