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

面试官:说说synchronized与ReentrantLock的区别


程序员的公众号:源1024获取更多资料,无加密无套路!

最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》,《Java并发编程实战》等等
获取方式: 关注公众号并回复 电子书 领取,更多内容持续奉上


  • 适用范围:Synchronized 只适用于在单个 JVM 实例中的多线程同步,而 ReentrantLock 可以跨越多个 JVM 实例,甚至可以在分布式环境下进行线程同步。

  • 可见性:使用 Synchronized 时,被锁定的代码块或方法中所做的修改会立即对其他线程可见。但是,使用 ReentrantLock 时,需要调用 unlock() 方法来释放锁,才能保证其他线程能够看到修改。

  • 用法不同:synchronized 可以用于修饰普通方法、静态方法以及代码块,而 ReentrantLock 仅适用于代码块。

  • 获取锁和释放锁方式:Synchronized 是隐式锁,可以自动加锁和释放锁,当进入 synchronized 修饰的代码块之后会自动加锁,当离开 synchronized 的代码段之后会自动释放锁。ReentrantLock 是显式锁,需要手动加锁和释放锁, 在使用之前需要先创建 ReentrantLock 对象,然后使用 lock 方法进行加锁,使用完之后再调用 unlock 方法释放锁。

  • 锁类型:默认情况下,synchronized 是非公平锁,而 ReentrantLock 也是非公平锁,但可以手动将 ReentrantLock 配置为公平锁,允许线程按照它们请求锁的顺序获取锁。

  • 中断响应: synchronized 无法直接响应中断,可能导致线程在锁上无限期地等待。ReentrantLock 具有响应中断的能力,可以在等待锁的过程中响应线程的中断请求,从而避免潜在的死锁情况。

 系列文章索引

MyBatis的插件能在哪些地方进行拦截?

了解MyBatis的缓存机制吗

面试官:谈谈对volatile的理解

Spring中用到了哪些设计模式

面试官:说一下SQL的执行过程

线程池的工作原理


 


http://www.kler.cn/news/157153.html

相关文章:

  • 训练 CNN 对 CIFAR-10 数据中的图像进行分类-keras实现
  • 【黑马甄选离线数仓day08_会员主题域开发】
  • 【STM32】TIM定时器输出比较
  • 中英翻译数据集处理
  • JFrog----常见的开源协议以及应用注意点
  • ESP32-Web-Server编程- 通过文本框向 Web 提交数据
  • 微信小程序跳转到外部小程序
  • 初步认识结构体
  • JVM之垃圾回收与算法(四)
  • 即兴语录-即兴小索奇语录
  • 数据结构:字典树(前缀树,Trie树),压缩字典树(Radix)
  • [ROS2] --- ROS diff ROS2
  • 11. 哈希冲突
  • python pyaudio给数据加噪声
  • PTA 7-229 sdut-C语言实验- 排序
  • 【数电笔记】06-码制
  • golang构建docker镜像的几种方式
  • 7. 系统信息与系统资源
  • ComfiUI API调用随记
  • vue3 中使用 sse 最佳实践,封装工具
  • 堆排序详细解读
  • 记录 | pip加速配置
  • Java中的锁
  • 一文打尽相机单目标定(远心,沙姆镜头)
  • 2024搞钱方式,这些你都了解吗?
  • Java NIO SelectionKey
  • 使用求2个字符串最长公共子序列的方法来实现 git diff 算法 java 实现
  • Kotlin学习之集合
  • 使用JAVA语言写一个排队叫号的小程序
  • C++ 系列 第四篇 C++ 数据类型上篇—基本类型