JD.LOCK.NOTIFY
当代码调用持有两个锁的 notify() 或 notifyAll() 时,发生 JD.LOCK.NOTIFY。
漏洞与风险
代码调用持有两个锁的 notify() 或 notifyAll()。如果该通知的目的是唤醒持有相同锁的 wait(),则可能会导致死锁,因为 wait 仅会放弃一个锁,因而 notify 将无法获得两个锁,因此 notify 将不会成功。如果还存在关于双锁等待的警告,则很有可能会出现问题。
缓解与预防
最好调用没持有锁的 notify() 方法。
示例 1
复制
synchronized void finish(Object o) {
synchronized(o) {
o.notify();
}
}
针对第 11 行报告 JD.LOCK.NOTIFY:调用持有两个或更多锁“[this, o]”的“java.lang.Object.notify()”可能会导致死锁。