线上环境偶尔一个待办无法处理,服务器 cpu100%,原因时数据库死锁了,因为逻辑是这样
有 2 条 id 分别为 1 ,2 的待办数据
处理 1 后,自动启一个线程更新 2
处理 2 后,自动启一个线程更新 1
因为处理比较耗时,用户可能反复重试,看起来会有死锁,但是自动更新是异步,不在一个事务里,这种情况会产生死锁吗?
service{
update(){
//事务
//耗时较长
}
}
WebControllerMethod(){
update(id:1)
ThreadPoolTaskExecutor.execute(() -> {
update(id:2)
}
}