情况是有两个线程正在等待某个事件。 这是僵局。在这种情况下,我希望一个线程放弃等待并抛出异常,以便其他线程可以继续其任务。 从逻辑上讲,我可以做到这一点,但有没有其他方式来完成这项任务? 我做了什么:
boolean flag=true;
run(){
synchronized(this){
if(flag){
boolean flag=false;
wait(1500);
}else{
throw new Exception();
}
}
}
更多说明: 例如 一个ThreadA想要在客户表中添加新客户(customerA) 他发现ThreadB已经启动了这个过程,所以ThreadA等待ThreadB完成(因为另一个表中的外键需要客户id)
ThreadB虽然已经完成插入到customerA,但它需要插入一些新的城市细节插入到城市表中但它正在等待,因为这个过程已经由ThreadA启动
两者都在等待彼此完成
答案 0 :(得分:0)
避免其类型的所有严格死锁的方法是始终以相同的顺序声明相同的锁。在您的示例中,两个线程都应首先更新City表,然后更新User表,否则它们应该以相反的方式更新。然后就不可能出现僵局。