0
我正在阅读以下tutorialGoogle App Engine中的JDO交易
请看下面的代码示例。
import javax.jdo.Transaction;
import ClubMembers; // not shown
// ...
// PersistenceManager pm = ...;
Transaction tx = pm.currentTransaction();
try {
tx.begin();
ClubMembers members = pm.getObjectById(ClubMembers.class, "k12345");
members.incrementCounterBy(1);
pm.makePersistent(members);
tx.commit();
} finally {
if (tx.isActive()) {
tx.rollback();
}
}
这是否意味着,在tx.begin和tx.commit之间的任何代码块,会出现只有一个进程/线程可以同时访问? tx.being和tx.commit与syncrhonized关键字类似吗?但同步保护扩展到进程级别而不是线程级别?
对于incrementCounterBy,我们是否明确声明了方法头是否同步?这是为了确保在整个Web环境中,一次只能有一个进程访问incrementCounterBy。但是,同步保护只适用于线程级别吗?同步关键字有帮助吗?或者它只是多余的,我们将完全依赖于tx.begin和tx.commit?
但是使用synchronized(Object){},只会给你线程级别的同步保护,而不是进程级别。不同的网络请求通常在不同的进程中重新进行 – 2009-10-27 17:01:59
很明显,对象将是“this”或其他使用完全锁定对象。 (不是新对象()) – Fedearne 2009-10-28 08:16:12