Skip to Content
面试题库Locks[知识讲解] MySQL加锁的方式有哪些?JVM锁的优化方式有哪些?

[知识讲解] MySQL加锁的方式有哪些?JVM锁的优化方式有哪些?

📖 知识讲解版 (温故知新)

  • MySQL加锁的方式

    • 两阶段加锁协议:这是 MySQL 行锁实际采用的方式。事务分为加锁和解锁两个阶段。事务执行期间按需随时获取锁(这是加锁阶段),但所有的锁都必须等到事务提交或回滚时才统一释放(这是解锁阶段)。这种方式并发度高,但由于获取锁没有顺序要求,可能会导致死锁。
    • 一阶段加锁协议:事务开始时一次性申请所有锁,最后一次性释放。优点是无死锁,缺点是并发度低。
    • MySQL的行锁是两阶段锁,在事务结束后统一释放。
  • JVM锁的优化方式

    • 锁粗化:多次加锁解锁合并为一次大范围的加锁,减少上下文切换。
    • 锁消除:如果编译器或者底层运行环境(如通过逃逸分析)发现某些局部变量根本不可能被多个线程共享,它就会把代码里加的锁给直接消除掉,避免无谓的性能损耗。
    • 锁粗化:如果我们在代码里连续多次对同一个对象加锁、解锁(比如在循环体里),系统就会把加锁的范围粗化(扩大)到整个操作序列的外部,这样就能减少频繁获取锁和释放锁带来的上下文切换开销。

最后更新于:
⏱️

登录后开始阅读

当前 MVP 版本只开放邮箱密码登录注册。完成登录后即可进入面试题内容。

还没有账号?先去注册