JD.LOCK.SLEEP
当方法调用持有一个锁的 Thread.sleep() 时,发生 JD.LOCK.SLEEP。
漏洞与风险
这可能会导致性能和可扩展性变得非常差,或者导致死锁,因为其他线程可能正在等待获得该锁。在锁上调用 wait() 效果可能会好得多,这样会释放锁,并允许其他线程运行。
缓解与预防
调用没持有锁的 sleep() 方法。
示例 1
复制
String name;
synchronized void finish(Object o) throws InterruptedException {
while (!name.equals("root")) {
Thread.sleep(1000);
}
}
针对第 16 行报告 JD.LOCK.SLEEP:调用持有锁“[this]”的“java.lang.Thread.sleep(long)”会导致死锁。