Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring data mongodb并发获取和更新是线程安全的吗?_Java_Spring_Multithreading_Mongodb_Concurrency - Fatal编程技术网

Java Spring data mongodb并发获取和更新是线程安全的吗?

Java Spring data mongodb并发获取和更新是线程安全的吗?,java,spring,multithreading,mongodb,concurrency,Java,Spring,Multithreading,Mongodb,Concurrency,我有以下问题:我有一个java服务,它对mongodb数据库中存储的值求和或求差 例如,如果数据库中的值为100,而调用我的服务时的值为10,则会发生以下情况: 我从数据库中得到值100 我把100和10相加 我将新值(110)再次保存到数据库中 然而,我害怕并发性。如果有很多人打同一个电话,会发生什么?我担心在过程的最后会出现不一致的价值观 问题是:上述过程是线程安全的吗?(我认为不是)。我应该做些什么来保持数据的一致性并处理这个线程并发性 更新 下面是代码 public void upd

我有以下问题:我有一个java服务,它对mongodb数据库中存储的值求和或求差

例如,如果数据库中的值为100,而调用我的服务时的值为10,则会发生以下情况:

  • 我从数据库中得到值100
  • 我把100和10相加
  • 我将新值(110)再次保存到数据库中
然而,我害怕并发性。如果有很多人打同一个电话,会发生什么?我担心在过程的最后会出现不一致的价值观

问题是:上述过程是线程安全的吗?(我认为不是)。我应该做些什么来保持数据的一致性并处理这个线程并发性

更新

下面是代码

public void update(Size entity, Integer newValue) {
    Size size = repository.findOneById(entity.getId());
    size.setTotal(size.getTotal() + newValue);
    repository.update(size);
}

不,它不是线程安全的,因为它不是以原子方式完成的,因为
MongoDB
不是事务数据库,您应该使用
$inc
操作符来满足这样的需要,因为它允许以原子方式增加给定数量的给定字段,更多详细信息