0
public class A { 
    String name = "foo";
}

@Service
public class B {
    
    private final Repository repo;
    
    public void someMethod(){
        A a = repo.findByName("foo");
        a.name = Thread.currentThread().getName();
        repo.save(a);
    }
}

想象一下,2 个线程同时执行了 someMethod。特别是在 jpa hibernate 实现中。

我的观点是存在竞争条件。

第一个和第二个线程获得了名称为 foo 的相同对象。如果我没记错的话,如果没有乐观锁,在这种情况下就会出错。

乐观锁也会抛出异常,所以我需要使用悲观锁才能正常工作吗?

另外,如果我使用分布式内存缓存(Redis,hazelcast)打开二级缓存,会发生什么?

这是一个物联网项目,数以百万计的设备正在调用这个 api 和服务。我需要最终保持一致吗?

4

0 回答 0