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

ReentrantLock

与 synchronized的异同点:

相同:都支持可重入

可重入:可重入是指同一个线程如果首次获得了这把锁,那么因为它是这把锁的拥有者,因此有权利再次获取这把锁 如果是不可重入锁,那么第二次获得锁时,自己也会被锁挡住

@Slf4j(topic = "c.TestReentrant")
public class TestReentrant {static ReentrantLock lock = new ReentrantLock();public static void main(String[] args) {method1();}public static void method1() {lock.lock();try {log.debug("execute method1");method2();} finally {lock.unlock();}}public static void method2() {lock.lock();try {log.debug("execute method2");method3();} finally {lock.unlock();}}public static void method3() {lock.lock();try {log.debug("execute method3");} finally {lock.unlock();}}
}

不同:对于 synchronized它具备如下特点

可中断
可以设置超时时间
可以设置为公平锁

公平锁一般没有必要,会降低并发度;可以使用tryLock()去设置超时时间。

支持多个条件变量

送烟、送外卖的例子;

多个条件变量,对应多个等待区;

相关文章:

  • Spring 事务的底层原理常见陷阱
  • 《解锁Windows下GCC升级密码,开启高效编程新旅程》
  • # LeetCode 1007 行相等的最少多米诺旋转
  • FreeRTOS事件组的本质
  • Flink 的状态机制
  • DeepSeek实战--LLM微调
  • 【算法基础】递归算法 - JAVA
  • 《Java高级编程:从原理到实战 - 进阶知识篇四》
  • 【c语言】数据在内存中的存储
  • [Linux开发工具]gcc/g++
  • wpf CommandParameter 传递MouseWheelEventArgs参数
  • [Vue]编程式导航
  • 回溯算法详解(Java实现):从组合到排列的全面解析
  • 延时启动windows中程序
  • MARM:推荐系统中的记忆增强突破
  • Cycleresearcher:通过自动化评审改进自动化研究
  • C# 方法(控制流和方法调用)
  • SQL笔记——左连接、右连接、内连接
  • pip命令
  • #Paper Reading# DeepSeek-R1
  • 金球看淡,不服就干!这是抬不起腿却昂着头的劳塔罗
  • 李云泽:将尽快推出支持小微企业民营企业融资一揽子政策
  • 打造多元文旅消费场景,第四届长三角城市戏剧节启幕
  • 预告:央行等部门将发声,介绍“一揽子金融政策支持稳市场稳预期”有关情况
  • 山东滕州车祸致6人遇难,肇事司机已被刑事拘留
  • 外交部:中欧关系50年发展最宝贵经验是相互尊重,求同存异