Java之java.lang.IllegalMonitorStateException
今天又中彩了, 原本很简单的多线程程序, 蓦然间冒了个"java.lang.IllegalMonitorStateException" , 杀了个措手不及. 一直纳闷, 为什么为什么? 查资料说该异常由于对象未获取得到Lock就试图操作Lock. 再细细源码, 原来不不小将lock.lock()写错为lock.tryLock(). 坑爹啦! 充足的睡眠是很关键的, 让你少做错事! 稳定的心态也是很关键的, 让你少走弯路!
public boolean put(String value) {
boolean result = false;
lock.tryLock();
try {
if (queue.size() < config.queueSize) {
queue.addLast(value);
result = true;
} else {
result = putToBuffer(value);
}
if (result) {
notEmpty.signalAll();
}
} catch (IOException e) {
logger.error("文件缓存添加元素错误", e);
} finally {
lock.unlock();
}
return result;
}