多线程编程遇到过的问题
1、异常:Exception in thread "Thread-12" java.lang.IllegalMonitorStateException
出现这个问题的一个场景之一:去unlock一个没有被锁上的锁。(其它场景可能出会出现这个问题,这只是其中一种可能的场景)
上代码看一眼吧:
错误的示例,会报 java.lang.IllegalMonitorStateException 的异常。
while(true){
Lock lock = t.lock.writeLock();
boolean b = false;
try {
b = lock.tryLock();
System.out.println(Thread.currentThread().getName() + " get the write lock, x = " + t.x);
} catch (Exception e) {
e.printStackTrace();
} finally {
// 如果这里不管它trylock 有没有成功,都去unlock的话,就会报以上的一个错误;
// 为了不报错,可以先看看它有没有拿到锁,拿到了锁,再去unlock就可以了
lock.unlock();
if(b){
}
}
}
改一点点,把 lock.unlock() 放到 if(b) {} 片段里面,就好了
while(true){
Lock lock = t.lock.writeLock();
boolean b = false;
try {
b = lock.tryLock();
System.out.println(Thread.currentThread().getName() + " get the write lock, x = " + t.x);
} catch (Exception e) {
e.printStackTrace();
} finally {
// 先判断一下,再去unlock
if(b){
lock.unlock();
}
}
}