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

Redission看门狗

在 Redisson 中,lock.tryLock() 和 lock.lock() 是两种不同的加锁方式,它们的行为有所不同:

  1. lock.lock():这是阻塞方法,当调用时,如果锁当前不可用,线程将被阻塞,直到获取到锁。如果锁被其他线程持有,当前线程会一直等待,直到锁被释放。

  2. lock.tryLock():这个方法是非阻塞的。它尝试获取锁,如果锁当前不可用,线程不会被阻塞,而是会立即返回一个布尔值来表示是否成功获取锁。

  3. lock.tryLock() 还有另外两种重载形式:

    lock.tryLock(long waitTime, long leaseTime, TimeUnit unit):这个方法尝试在指定的等待时间内获取锁。如果锁在等待时间内可用,则获取锁并返回 true。如果锁在等待时间内不可用,则返回 false。一旦获取到锁,锁会保持指定的租用时间(leaseTime),然后自动释放。

    lock.tryLock(long leaseTime, TimeUnit unit):这个方法尝试获取锁,如果锁当前不可用,线程会立即返回 false。如果锁可用,则获取锁并返回 true。锁会保持指定的租用时间(leaseTime),然后自动释放。

  4. 至于看门狗机制,Redisson 提供了一个自动的续期机制来防止死锁。当你使用 lock.lock() 或
    lock.tryLock(long leaseTime, TimeUnit unit)
    方法获取锁时,并且锁的租用时间(leaseTime)设置为 -1(即无限期),Redisson
    的看门狗机制会自动启动。看门狗会定期检查这个锁是否仍然被当前线程持有,如果持有,就会自动为这个锁续期。

  5. 如果你使用的是带有固定租用时间的 lock.tryLock(long leaseTime, TimeUnit unit)
    方法,看门狗机制不会自动续期。在这种情况下,锁会在指定的租用时间后自动释放,看门狗机制不会介入。

所以,看门狗机制是自动的,但它的续期行为取决于你获取锁的方式和锁的租用时间设置。

http://www.lryc.cn/news/537014.html

相关文章:

  • LeetCode 热题 100_组合总和(58_39_中等_C++)(递归(回溯))
  • 使用PHP爬虫获取1688商品分类:实战案例指南
  • Nginx location 和 proxy_pass 配置详解
  • 云创智城充电系统:基于 SpringCloud 的高可用、可扩展架构详解-多租户、多协议兼容、分账与互联互通功能实现
  • AIP-143 标准代号
  • 机器视觉--数字图像格式
  • Kotlin 2.1.0 入门教程(十七)接口
  • 渗透测试工具:SQLmap安装教程及使用
  • 4.SpringSecurity在分布式环境下的使用
  • RocketMQ和Kafka如何实现顺序写入和顺序消费?
  • SQL联合查询
  • deepseek:三个月备考高级系统架构师
  • 支持向量机原理
  • DeepSeek人工智能AI汽车营销销售培训讲师培训师唐兴通讲课汽车销售大数据存量客户数字化营销数字化销售大模型销售话术引流内容社群私域
  • Molecular Communication(分子通信)与 Molecular Semantic Communication(分子语义通信)
  • Webpack代码分割、分割策略性能优化详解
  • 大脑网络与智力:基于图神经网络的静息态fMRI数据分析方法|文献速递-医学影像人工智能进展
  • ArcGIS Pro显示缓存空间不足导致编辑或加载数据显示不完全
  • 天童美语:观察你的生活
  • 网络通信的基石:深入理解 TCP/IP 协议栈与 TCP/UDP 协议
  • 数据结构-栈和队列的应用
  • SpringBoot Bug 日志
  • halo发布文章的插件问题分析
  • 2.5 模块化迁移策略:从传统项目到模块化系统
  • java商城解决方案
  • 算法-哈希表篇05-四数相加II
  • WPS或word接入智能AI
  • Leetcode:学习记录
  • 86.在 Vue 3 中使用 OpenLayers 自定义组件(放大、缩小、长度测量、面积测量)
  • http 与 https 的区别?