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

大连做网站哪家便宜医院网站建设 费用

大连做网站哪家便宜,医院网站建设 费用,市场调研报告,wordpress手机ui文章目录 前言一、 ReentrantLock(单机锁,Java 内置)示例:方法详解 二、RLock(分布式锁,Redisson 提供)示例:方法详解 三、 对比总结:四、 如何选择? 前言 ReentrantLock 和 RLock 都…

文章目录

  • 前言
  • 一、 ReentrantLock(单机锁,Java 内置)
    • 示例:
    • 方法详解
  • 二、RLock(分布式锁,Redisson 提供)
    • 示例:
    • 方法详解
  • 三、 对比总结:
  • 四、 如何选择?


前言

ReentrantLock 和 RLock 都是可重入锁(Reentrant Lock),但它们属于不同的锁实现,分别适用于 单机环境 和 分布式环境。

一、 ReentrantLock(单机锁,Java 内置)

ReentrantLock 是 Java 标准库(java.util.concurrent.locks)提供的可重入互斥锁,适用于 单机多线程 场景。特点可重入性:同一个线程可以多次获取同一把锁(避免死锁)。公平/非公平锁:支持公平锁(按等待顺序获取)和非公平锁(默认,允许插队)。可中断:lockInterruptibly() 允许线程在等待锁时响应中断。条件变量:支持 Condition,用于线程间协调(如 await() / signal())。必须手动释放:必须调用 unlock(),否则可能导致死锁。

示例:

ReentrantLock lock = new ReentrantLock();
try {if (lock.tryLock(1, TimeUnit.SECONDS)) { // 尝试获取锁,最多等1秒try {System.out.println("Lock acquired!");} finally {lock.unlock(); // 必须手动释放}}
} catch (InterruptedException e) {Thread.currentThread().interrupt();
}

方法详解

方法说明
lock()阻塞获取锁,如果锁被占用,当前线程会一直等待。
lockInterruptibly()可中断地获取锁,等待过程中可响应 InterruptedException。
tryLock()尝试非阻塞获取锁,成功返回 true,失败返回 false。
tryLock(long timeout, TimeUnit unit)在指定时间内尝试获取锁,超时返回 false。
unlock()释放锁(必须在 finally 块中调用,避免死锁)。
isLocked()判断锁是否被占用(非标准方法,需自定义实现)。
isHeldByCurrentThread()判断当前线程是否持有锁。
getHoldCount()返回当前线程持有锁的次数(可重入计数)。
getQueueLength()返回等待获取锁的线程数(监控用)。
hasQueuedThreads()是否有线程在等待锁。
newCondition()返回 Condition 对象,用于线程间协调(类似 wait/notify)。

二、RLock(分布式锁,Redisson 提供)

RLock 是 Redisson(Redis 客户端)提供的 分布式可重入锁,适用于 多机多进程 环境,基于 Redis 实现。特点可重入性:同 ReentrantLock,支持同一个客户端多次加锁。自动释放(Lease Time):可以设置锁的自动过期时间(防止死锁)。看门狗机制(Watchdog):如果未指定 leaseTime,Redisson 会启动一个后台线程(看门狗)自动续期锁,避免业务未执行完锁就过期。支持高可用:如果 Redis 是集群模式,RLock 仍然可用(Redisson 有 RedLock 算法)。支持异步锁:提供 lockAsync() 等异步方法。

示例:

RLock lock = redisson.getLock("myLock");
try {// 尝试获取锁,最多等10秒,锁自动30秒后释放if (lock.tryLock(10, 30, TimeUnit.SECONDS)) {try {System.out.println("Lock acquired!");// 业务逻辑...} finally {lock.unlock(); // 建议手动释放(即使设置了leaseTime)}}
} catch (InterruptedException e) {Thread.currentThread().interrupt();
}

方法详解

方法说明
lock()阻塞获取锁,默认 看门狗自动续期(防止死锁)。
lock(long leaseTime, TimeUnit unit)获取锁并设置自动释放时间(leaseTime 后自动释放)。
lockInterruptibly()可中断获取锁(支持线程中断)。
tryLock()尝试获取锁,成功返回 true,失败返回 false。
tryLock(long waitTime, long leaseTime, TimeUnit unit)在 waitTime 内尝试获取锁,成功后锁在 leaseTime 后自动释放。
unlock()释放锁(建议在 finally 中调用)。
forceUnlock()强制释放锁(即使当前线程未持有)。
isLocked()判断锁是否被占用。
isHeldByCurrentThread()当前线程是否持有锁。
remainTimeToLive()返回锁的剩余存活时间(TTL)。

三、 对比总结:

在这里插入图片描述

四、 如何选择?

单机应用 ➝ ReentrantLock(更轻量,无网络开销)。
分布式系统 ➝ RLock(基于 Redis,适用于多服务竞争锁)。
需要自动释放 ➝ RLock(设置 leaseTime 防止死锁)。
需要条件变量 ➝ ReentrantLock(Condition 更灵活)。
如果你的应用是 微服务/分布式架构,RLock 是更好的选择;如果是 单机高并发,ReentrantLock 更高效。

http://www.dtcms.com/a/421981.html

相关文章:

  • 企业内网网站网站建设地址 北京
  • 镇江牛吧企业网站建设与推广公司网站建设咨询公司地址
  • 邯郸做企业网站设计的公司双鱼儿 网站建设
  • 吉林省软环境建设办公室网站wordpress安装显示英文
  • 重庆企业网站推广流程北京网站建设开发
  • 产品介绍网站模板濮阳网站建设
  • wap网站的未来网站开发哪里有培训
  • 网站建设中左对齐wordpress 云储存插件
  • 乌审旗建设局网站网站首页结构布局
  • 做定制网站多少钱动叫建个网站刷排名
  • 论坛类的网站怎么做天创网站
  • 四川省微信网站建设推广关键词排名优化公司哪家强
  • 济南网站制作哪家专业我想创建一个网站自己玩玩
  • 韩都衣舍的网站建设网站后台源代码
  • 网站制作属于什么专业WordPress hitokoto
  • 东莞在线网站制作平台seo网站优化推广怎么样
  • 网站开发什么开发语言好轻松筹 的网站价格做
  • 都有哪些不错的网页设计网站网页设计高端
  • 如何做网站广告陕西省建设网三类人员成绩公示
  • 我做淘宝网站卖东西怎么激活北京网站设计联系电话
  • 小米公司网站前建设分析物流公司
  • 视频教学互动网站建设网页编辑平台
  • 做火影网站背景图wordpress 如何备份数据库结构
  • 哪个网站可以做纸箱长沙网站建设方案
  • 网站页脚优化怎么做西安哪些做网站的公司好
  • 网上写作平台有哪些二级域名网站优化
  • 效益型网站打开浏览器直接进入网站
  • 网站项目申请网站开发定制合同
  • 门户网站如何推广免费申请的网站
  • 网站建设价格西安wordpress 固定链接 中文