java.lang.management.ThreadMXBean接口的实现可用于获取线程相关信息,以及做死锁检测
如果想获知一个线程被IO或锁阻塞占整体线程运行时间的比例,那么需要利用ThreadMXBean获取以下3种信息:
1. getThreadUserTime获得线程在用户态执行的时间,单位为纳秒,但由于硬件及操作系统的限制不保证
精确到纳秒
2. getThreadInfo获得ThreadInfo的实例,并通过ThreadInfo的getBlockedTime获得被阻塞的时间(调用synchronized的语句或函数时),通过ThreadInfo的getWaitedTime获得等待时间(调用wait/join等待的时间)
将usertime除以blockedTime+waitedTime即可知道执行时间与阻塞时间的比例。