public static void main(String[] args) {
Lock lock = new ReentrantLock();
lock.lock();
try{
int i = 1 / 0;
// lock.lock();
}finally {
lock.unlock();
}
}
如果lock.lock放在try里面就会引发上述异常,因为在加锁之前可能会出现异常情况,这时候加锁失败,然后finally释放锁的时候,发现没有锁定对象.正确写法是加锁代码应放在try外面.