Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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_Google App Engine_Synchronization_Jdo_Datanucleus - Fatal编程技术网

Java GAE中的列表访问同步

Java GAE中的列表访问同步,java,google-app-engine,synchronization,jdo,datanucleus,Java,Google App Engine,Synchronization,Jdo,Datanucleus,我只是同步了我的java代码,以避免对同一列表的多次访问。这是我的代码: List<Category> list = Collections.synchronizedList(listCat); .. pm.currentTransaction().begin(); .. synchronized (list) { for (Category category : list) { category.setKey(null); tempUser

我只是同步了我的java代码,以避免对同一列表的多次访问。这是我的代码:

List<Category> list = Collections.synchronizedList(listCat); 
..
pm.currentTransaction().begin();
..
synchronized (list) {
    for (Category category : list) {
        category.setKey(null);
        tempUser.addToCategories(category);
    }
}
..
pm.currentTransaction().commit();
。。当不同的实例访问该列表时。 有没有办法避免这种情况?我指的是不同于此处规定的方式:


我使用JDO 2.3,但我认为它无论如何都不会影响这种行为。GAE事务不执行锁定:它们使用,这意味着如果多个事务更改同一实体组,第一个将成功,其他事务将失败,需要重试。

uhm。。那么所有的同步都是无用的?唯一的方法是捕获异常并重试?Java同步在JVM中工作。它不能跨多个GAE实例工作。因此,它在分布式环境(如GAE.ok)中没有用处清楚:最后(如我的问题中所要求的),除了包装ConcurrentException并重试之外,没有其他方法。。正确的?
java.util.ConcurrentModificationException: too much contention on these datastore entities. please try again.
at com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:39)
at com.google.appengine.api.datastore.DatastoreApiHelper$1.convertException(DatastoreApiHelper.java:76)
at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:106)
at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:90)
at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:90)
at com.google.appengine.api.datastore.FutureHelper.getInternal(FutureHelper.java:72)
at com.google.appengine.api.datastore.FutureHelper.quietGet(FutureHelper.java:33)
at com.google.appengine.api.datastore.TransactionImpl.commit(TransactionImpl.java:116)
at org.datanucleus.store.appengine.jdo.DatastoreJDOTransaction.commit(DatastoreJDOTransaction.java:68)
at (the row where the transaction is committed)