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