【问题标题】:GAE/Java: Are Transactions Thread-Safe?GAE/Java:事务是线程安全的吗?
【发布时间】:2013-04-30 02:51:47
【问题描述】:

如果这是一个明显的问题,请原谅我,但我从上到下阅读了documentation,我仍然不确定这个问题的答案是什么:

如果我有一个读取计数器编号并将其递增的数据存储事务,我能否确定 2 个并行 servlet 不会相互交错?换句话说,文档只说事务要么失败要么自动成功,但并没有说事务为其他servlet锁定数据,那么当2个servlet同时访问同一个实体时会发生什么?

如果事务确实不是线程安全的,我应该在访问共享数据存储计数器时只使用synchronized 吗?

【问题讨论】:

  • synchronized 仅在单个 JVM 中(大致)有效,并且在 AppEngine 启动多个 JVM 来为您的应用程序提供服务时无济于事。您当前的交易代码看起来如何?您希望有多少查询会出现在您的柜台上?可能值得看看developers.google.com/appengine/articles/sharding_counters

标签: java google-app-engine


【解决方案1】:

只要您为具有共同祖先的实体写入事务,事务就是“线程安全的”。

看看 GAE 低级数据存储 API,一旦您了解了实体的工作原理,就会非常简单。

https://developers.google.com/appengine/docs/java/datastore/entities

【讨论】:

    猜你喜欢
    • 2018-02-14
    • 2011-03-07
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    相关资源
    最近更新 更多