多线程编程遇到过的问题

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();
}
}
}

 

posted @   aaacarrot  阅读(111)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示