跳至主要内容

Exception in thread "1" java.lang.IllegalMonitorStateException

把玩同步锁时,抛出了一个异常Exception in thread "1" java.lang.IllegalMonitorStateException

抛出异常的代码如下:

根据异常类型,在ReentrantLock代码注释找到了答案:如果当前线程不是此锁的持有者则抛出IllegalMonitorStateException异常。
然后我在代码中加了跟踪语句:
但是还是没理解为什么上个线程执行完了没有释放锁,mark一下,日后再看。




我知道原因了,我真的是太傻了。
这串代码执行结果并不是没有释放锁,而是因为释放了锁没有重新上锁,导致再次释放锁时找不到锁而抛出异常。这也就是为什么执行结果是抛出异常后就终止运行,因为Lock锁如果尝试获取不到锁,线程可以不用一直等待就结束了。

评论