Java GAE中的同步块

Java GAE中的同步块,java,google-app-engine,servlets,Java,Google App Engine,Servlets,我有一个应用程序在GAE中运行。每几分钟有2个cron servlet被时间触发一次。检索和更新相同的存储记录。因此,我添加了Synchronized块来封装两个servlet上几乎所有的处理逻辑。但是,根据日志中的时间,当它们在不同的JVM中时,它们的流仍然混合在一起。看起来,同步块仅在它们位于同一JVM中时才对其进行保护。我说得对吗?如果是这样,如何在GAE中进行并发处理?请提供帮助。您是正确的-同步块仅在单个进程中工作。AppEngine cron servlet在云中任意数量的服务器上并

我有一个应用程序在GAE中运行。每几分钟有2个cron servlet被时间触发一次。检索和更新相同的存储记录。因此,我添加了Synchronized块来封装两个servlet上几乎所有的处理逻辑。但是,根据日志中的时间,当它们在不同的JVM中时,它们的流仍然混合在一起。看起来,同步块仅在它们位于同一JVM中时才对其进行保护。我说得对吗?如果是这样,如何在GAE中进行并发处理?请提供帮助。

您是正确的-同步块仅在单个进程中工作。AppEngine cron servlet在云中任意数量的服务器上并发执行。您应该重新设计cron作业中要使用的互斥。由于此类cron任务可能会导致长时间运行的操作,因此使用。

OIC管理繁重的处理通常很有用,谢谢。因此,我必须为我的2个servlet使用一个任务队列。如果我使用两个队列,那么最终会出现相同的问题。对吗?不,队列的数量不是一个因素。数据存储事务使用更具可伸缩性的乐观并发,而不是悲观并发。这有一个不同的问题,即如果多个后台进程试图同时修改相同的数据,第一个进程将成功,第二个进程将失败(数据存储抛出异常)。您的cron任务将需要一个循环来捕获ConcurrentModificationException,稍作睡眠,然后重试。