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)”会导致死锁。

相关检查器