Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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 如何仅在GAE数据存储中保存不存在的实体,同时防止竞争条件_Java_Multithreading_Google App Engine_Google Cloud Datastore - Fatal编程技术网

Java 如何仅在GAE数据存储中保存不存在的实体,同时防止竞争条件

Java 如何仅在GAE数据存储中保存不存在的实体,同时防止竞争条件,java,multithreading,google-app-engine,google-cloud-datastore,Java,Multithreading,Google App Engine,Google Cloud Datastore,我试图保存一个实体到谷歌应用程序引擎数据存储只有当它不存在,如果它这样做线程不应该继续 主要问题是:我想防止任何竞争条件,这样,如果两个线程同时执行此操作,则只有一个线程能够成功保存实体 我不确定这方面的最佳方法是什么,使用事务是可行的还是必须依赖其他解决方案,例如使用Memcache 请在java的低级API中提供答案假设两个线程都试图用相同的键保存一个实体,则此代码: datastore.add(entity); 我会做你想做的。如果数据存储中已存在具有相同密钥的实体,则.add()将引发

我试图保存一个实体到谷歌应用程序引擎数据存储只有当它不存在,如果它这样做线程不应该继续

主要问题是:我想防止任何竞争条件,这样,如果两个线程同时执行此操作,则只有一个线程能够成功保存实体

我不确定这方面的最佳方法是什么,使用事务是可行的还是必须依赖其他解决方案,例如使用Memcache


请在java的低级API中提供答案

假设两个线程都试图用相同的键保存一个实体,则此代码:

datastore.add(entity);

我会做你想做的。如果数据存储中已存在具有相同密钥的实体,则.add()将引发异常。

假设两个线程都试图使用相同密钥保存实体,则此代码:

datastore.add(entity);

我会做你想做的。如果数据存储中已存在具有相同密钥的实体,则.add()将引发异常。

从App Engine调用数据存储时,api不同。使用事务。首先尝试获取()实体,看看它是否在那里。如果不是,则将()放在实体上

下面是一些示例代码,用于演示使用App Engine API的事务:

从App Engine调用数据存储时,api是不同的。使用事务。首先尝试获取()实体,看看它是否在那里。如果不是,则将()放在实体上

下面是一些示例代码,用于演示使用App Engine API的事务:

没有名为add for class DatastoreService的函数,您能给我指一下此类函数的文档吗单击这些文档中的Java选项卡:完整的Java源代码在这里:除非我缺少什么,app engine上数据存储的api是com.google.appengine.api.datastore.*而不是com.google.cloud.datastore.*没有名为add for class DatastoreService的函数,您能给我指一下此类函数的文档吗单击这些文档中的Java选项卡:完整的Java源代码在这里:除非我缺少什么,appengine上数据存储的api是com.google.appengine.api.datastore.*而不是com.google.cloud.datastore*