技术文摘
别再误解 synchronized 是重量级锁,看这篇文章
别再误解 synchronized 是重量级锁,看这篇文章
在 Java 多线程编程中,synchronized 关键字是常用的同步机制。然而,很多开发者对它存在一个常见的误解,认为它总是重量级锁,这其实是不准确的。
我们要明确重量级锁的概念。重量级锁是指在多线程竞争激烈的情况下,使用了操作系统层面的互斥量来实现同步,这种方式会带来较大的性能开销。
但 synchronized 并非一开始就是重量级锁。在 Java 中,synchronized 的实现是基于对象头中的标记位和 monitor 机制。当多个线程竞争不激烈时,它会采用偏向锁或者轻量级锁的方式来提高性能。
偏向锁是一种针对只有一个线程访问同步块的优化。当一个线程第一次获取锁时,会将对象头中的标记位设置为偏向该线程,后续该线程再次进入同步块时,无需进行额外的同步操作。
轻量级锁则是在多个线程竞争但不激烈的情况下使用。它通过 CAS 操作来尝试获取锁,如果获取成功则直接使用,否则会升级为重量级锁。
只有在多线程竞争非常激烈,轻量级锁的自旋操作达到一定次数仍无法获取锁时,synchronized 才会升级为重量级锁。
所以,不能一概而论地认为 synchronized 就是重量级锁。在实际开发中,我们需要根据具体的场景和线程竞争情况来评估其性能影响。
为了更好地理解和运用 synchronized,我们还需要考虑锁的粒度和锁的范围。过于粗粒度的锁可能会导致并发度降低,而过于细粒度的锁可能会增加锁竞争的开销。
对于 synchronized 锁的理解不能停留在简单的“重量级锁”的误区中。深入了解其内部实现机制和适用场景,才能在多线程编程中更好地发挥其作用,提高程序的性能和并发度。希望通过这篇文章,能让您对 synchronized 有更清晰、准确的认识,从而在编程实践中更加得心应手。
TAGS: 技术解析 文章解读 误解澄清 Synchronized 锁
- 5 分钟搭建首个 Python 聊天机器人
- 这 10 个常见的 Javascript 问题,你能回答吗?
- C/C++中 sizeof 的基础运用
- Java 反射:框架设计的关键所在
- 高通称与华为达成长期专利协议
- 究竟谁拥有干翻一切的王者语言
- GitHub 热点速览 Vol.30:提升效率的小工具集合
- Python 实现面部识别的简单智能方法
- 代码自动补全的完整流程
- 谷歌 TPU 训练 BERT 仅需 23 秒 华为 AI 芯片胜英伟达 V100
- 浅析企业级系统架构
- 小小验证码 作用非凡
- 我的未来在何方?
- Python 内置数据库 SQLite3 你了解吗?使用指南在此
- 写好代码的 6 个入门关键要点分享