我正在考虑从 synchronized
切换到 ReadWriteLock
。在这样做之前,我想检查一下它是否值得。
ThreadMXBean
和 ThreadInfo
提供有关总体线程阻塞计数和时间的信息。这些 block 可能是由多个监视器引起的。有没有一种方法可以测量给定特定监视器对象的 block 统计信息?
最佳答案
是的,可以使用 JVMTI .
您需要编写一个本地代理来处理一对事件:
- MonitorContendedEnter - 当一个线程即将进入已被另一个线程获取的同步块(synchronized block)时触发;
- MonitorContendedEntered - 当线程在等待后成功获取监视器时触发。
这两个事件都接受 jthread
和 jobject
参数,它们对应于获取监视器的线程和监视器对象本身。
Here is竞争分析器代理的示例代码。
关于java - 测量特定监视器上的线程争用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38208487/