You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多核CPU环境下线程锁的宏观工作机制解析

多核CPU下Java线程获取锁的宏观运作机制

当多个线程在不同CPU核心上并行争抢synchronized锁时,整个过程可以拆解成几个关键阶段,核心依赖缓存一致性协议和操作系统调度机制配合工作:

  • 初始竞争触发:锁对象的状态(存在于对象头的Mark Word)会被加载到各个核心的L1/L2缓存中。当多个核心上的线程同时执行锁获取指令时,本质是尝试修改这个Mark Word来标记自己为锁持有者。
  • 缓存一致性裁决:CPU的缓存一致性协议(比如x86架构的MESI)会介入,确保同一时刻只有一个核心能成功修改Mark Word的锁状态——这个核心的线程会立即获得锁,进入临界区执行;其他核心的修改请求会被驳回,对应的缓存副本会被标记为失效。
  • 竞争失败线程的处理:
    • 轻量竞争场景下,失败的线程会先进入自旋等待(用户态循环,不切换到内核态),因为很多时候锁会在极短时间内被释放,自旋能避免昂贵的内核态切换开销;
    • 自旋一定次数(JVM可配置,默认和CPU核心数相关)后仍未获取锁,线程会陷入内核态阻塞,被操作系统放入锁的等待队列,此时该核心可以调度其他线程执行。
  • 锁释放与唤醒:持有锁的线程执行完临界区代码后,会修改Mark Word释放锁,缓存一致性协议会同步更新其他核心的缓存状态。操作系统会唤醒等待队列中的线程,这些线程会重新参与锁的竞争,重复上述流程。

简单来说,多核场景下的锁竞争,底层靠硬件缓存一致性保证“只有一个线程能拿到锁”的原子性,上层靠JVM和操作系统的协作处理竞争失败的线程,平衡性能和资源占用。

内容的提问来源于stack exchange,提问作者Sahil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 11:04:54