gpt4 book ai didi

java - 线程放弃等待并抛出异常的方法

转载 作者:搜寻专家 更新时间:2023-11-01 03:51:51 26 4
gpt4 key购买 nike

情况是有两个线程互相等待某个事件。这是僵局。在这种情况下,我希望一个线程放弃等待并抛出异常,以便其他线程可以继续其任务。从逻辑上讲我可以做到,但是还有其他方法可以完成这项任务吗?我做了什么:

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 启动

两者都在等待对方完成

最佳答案

避免他的类型的所有严格死锁的方法是总是以相同的顺序要求相同的锁。在您的示例中,两个线程都应首先更新 City 表,然后再更新 User 表,或者它们都应该以相反的方式进行。那么就不可能出现死锁。

关于java - 线程放弃等待并抛出异常的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24523650/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com