情况是有两个线程在等待某个事件,它们互相等待而导致了死锁。在这种情况下,我希望其中一个线程放弃等待并抛出异常,以便另一个线程可以继续执行任务。从逻辑上讲,我可以这样做,但是否有其他方法来实现这个任务呢?
我已经做了以下工作:
boolean flag=true;
run(){
synchronized(this){
if(flag){
boolean flag=false;
wait(1500);
}else{
throw new Exception();
}
}
}
更多描述:
例如,线程A想要在客户表中添加新客户(客户A),但他发现线程B已经开始了这个过程,所以线程A正在等待线程B完成(因为在另一个表中需要客户ID作为外键)。
线程B虽然已经完成了对客户A的插入,但它需要插入一些新的城市详细信息以插入到城市表中,但由于此过程已被线程A启动,所以它正在等待。
两个线程都在等待彼此完成。
wait
调用,但是没有可识别的条件在等待。通常情况下,另一个线程会调用notify
来允许wait
结束,但这必须与可检查的条件相结合,等待线程必须检查(并在wait
后重新检查),并且通知线程必须更改为已满足。唯一看起来像条件的是你的boolean
标志,但由于等待线程在等待之前自己修改了该标志,所以这一切都没有意义。 - Holger