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 和服务。我需要最终保持一致吗?