偏向锁撤销流程中,在到达全局安全点之前,当前线程是什么状态?

当线程A获取了偏向锁以后,有线程B尝试获取偏向锁,无论此时线程A有没有离开临界区,一定会进入偏向锁撤销流程,撤销流程中将会判定是否撤销偏向锁。其中要进行判定的话必须先要等待到达全局安全点(safe point),那问题就是,从撤销流程开始,到全局安全点之间的这段时间里:
1.线程B是处于什么状态?(既然线程B没获取到锁,应该是不会继续运行的吧?而偏向锁又不会让线程阻塞)
2.线程A会不会再次进入临界区?

我当前的理解是撤销流程开始后并不会立即到达全局安全点,期间会有一段时间间隔,不知道对不对

阅读 3k
1 个回答

没有细研究过,但我猜和GC时的要求进入safepoint应该是类似的。

1.线程B当然还是RUNNABLE状态,线程B会向VMTread提交要求进入safepoint的任务,然后等待返回,类似于GC线程要求其他线程进入safepoint之后他再工作

2.线程A会不会再次进入临界区不好说,得看要求检测safepoint的时机

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题