锁的释放唤起其他线程

来源:9-3 synchronized底层实现原理-2

慕粉1890165

2023-12-19

锁的释放:

  • A线程通过CAS操作尝试将线程中的displaced markword替换为当前锁对象的markword。
  • 如果直接复制成功,说明没有其他线程竞争锁对象资源,对共享变量修改。
  • 如果复制失败,说明锁的标志位已经变了,说明有其他线程在竞争锁,锁升级了,就要在释放锁的时候,唤起其他线程。

唤起其他线程是notify吗?notify唤醒的是等待池中的线程,并不是锁池中的线程。
您说的唤醒是什么操作呢?

写回答

1回答

翔仔

2023-12-20

执行同步代码块,没有竞争到锁的对象会park()被挂起,竞争到锁的线程会unpark()唤醒。这个时候就会存在操作系统用户态和内核态的转换,这种切换会消耗大量的系统资源

0
0

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8441 学习 · 1872 问题

查看课程