Boz*_*zho 10
如果您使用的是synchronized关键字 - 没有.但是如果你使用java.util.concurrent锁,你可以.
ReentrantLock有一个受保护的方法getWaitingThreads().如果你扩展它,你可以公开它.
更新:您正在使用.wait()和.notify(),因此您可以在每次通知List<Thread>之前手动填写并清空- 在wach .wait()通话之前list.add(Thread.currentThread(),并将其删除.它并不完美,但实际上你不应该需要这样的清单.
您可以使用JMX类来检查线程:
ThreadInfo[] infos = ManagementFactory.getThreadMXBean().dumpAllThreads(true, true);
Run Code Online (Sandbox Code Playgroud)
每个被阻塞的线程都有一个非空LockInfo关联,可以让您识别它正在等待的对象:
for (ThreadInfo info : infos) {
LockInfo lockInfo = info.getLockInfo();
if (lockInfo != null
&& lockInfo.getClassName().equals(lock.getClass().getName())
&& lockInfo.getIdentityHashCode() == System.identityHashCode(lock)) {
System.out.println("Thread waiting on " + lock + " : " + info.getThreadName());
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3551 次 |
| 最近记录: |