gpt4 book ai didi

Java选择性同步

转载 作者:行者123 更新时间:2023-11-29 09:35:53 25 4
gpt4 key购买 nike

我正在维护一个非常古老的应用程序,最近我遇到了一个“多线程”错误。这里,在一个方法中,要将值插入数据库,首先检查记录是否存在,如果不存在,则将其插入数据库。

createSomething(params)
{
....
....
if( !isPresentInDb(params) )
{
.....
.....
.....
insertIntoDb(params)
}
...
}

此处当多个线程调用该方法时,具有相同参数的两个或多个线程可能会越过isPresentInDb检查,一个线程成功插入,其他线程失败。

为了解决这个问题,我将两个数据库交互都包含在一个 synchronized(this) block 中。但是有更好的方法吗?

编辑:它更像是选择性同步,只有具有相同参数的线程才需要被同步。选择性同步是否可能?

最佳答案

我想说,如果可能的话,更好的方法是让数据库为您做这件事。假设您要更新或插入的数据库行对其有唯一约束,那么我通常的方法是

  • 无条件插入行
  • 如果发生 SQLException,检查它是否是由于插入错误时的重复键,如果是,则进行更新,否则重新抛出 SQLException。

如果您可以将这些语句包装在数据库事务中,那么您就不必担心两个线程相互践踏。

关于Java选择性同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7888764/

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