Threads_lock在jvm中有什么作用,会用到哪些场景

What is the role of Threads_lock in jvm and which scenarios will be used

我遇到了一个问题:在management.cpp中,jmm_GetThreadInfo方法会先获取Threads_lock锁,假设线程太多,非常耗时,这导致了一个不明显的问题:其他一些线程被阻塞了,一直在等待这个锁被释放,但是我找不到线程会在哪里触发突然阻塞在这个锁上。

我有一些问题:

  1. Threads_lock在jvm中的作用以及会用到哪些场景
  2. Threads_lock是否会导致其他线程阻塞。

Threads_lock是在mutexLocker.cpp.The官方解释是

a lock on the Threads table of active Java threads
(also used by Safepoints too to block threads creation/destruction)

谢谢

Threads_lock 保护 JVM 管理的线程列表免受并发修改。当新线程启动时、线程退出时以及在安全点时获取锁。 Threads_lock 不会阻止 运行 个线程执行它们的常规工作。

在JDK 8 中,Threads_lock 也被用于遍历现有线程列表,这确实导致了性能问题。自 JDK 10 起,JVM 维护 lock-free 读取访问的线程列表快照。