Thread.holdsLock(锁定)的目的是什么?

use*_*949 6 java multithreading

我看到有人 assert !Thread.holdsLock(lock)用来避免死锁.

这是什么目的?如果锁定对象由另一个线程持有,那么断言会导致代码立即退出吗?

JB *_*zet 7

方法javadoc说:

true当且仅当当前线程在指定对象上保存监视器锁时返回.

(强调我的)

因此,断言检查当前线程是否不保持给定锁定对象的监视器锁定.

请注意,断言用于检查不变量,可以禁用.它们不应该用于防止死锁.if应该使用常规测试来做到这一点.