gpt4 book ai didi

java - 多线程 OptimisticLockException

转载 作者:太空宇宙 更新时间:2023-11-04 09:04:47 34 4
gpt4 key购买 nike

我有多个线程读取一个表。每个线程都想从表中读取一个值,然后将状态从 used = 'N' 更改为 used = 'Y'

Value = `Select min(myColumn) where used =’N’`

我将我的方法设置为同步,但碰巧多个线程读取相同的值,当第二次尝试更新使用“Y”时,他遇到了*OptimisticLockException*。当许多线程由于 *OptimisticLockException* 导致时,我会遇到性能问题。SKIP_LOCK 解决方案不适用于我的案例。

您知道如何解决这个问题吗?

谢谢

最佳答案

我没有使用Spring Boot的经验,但是使用普通的JPA,当你进行查询时,你可以设置LockMode。

类似这样的事情:

query.setLockMode(LockModeType.PESSIMISTIC_WRITE);

这样,生成的 SQL 使用数据库功能(通常这意味着它会在 SQL 查询中附加“for update”),对所选数据进行锁定,以防止其他客户端在事务结束之前读取它。

如果使用这种类型的锁,则无需在方法级别使用任何同步,因为并发将在数据库级别进行控制。

本文更详细地解释了在 JPA 中使用悲观锁定:https://www.baeldung.com/jpa-pessimistic-locking

关于java - 多线程 OptimisticLockException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60344948/

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