いくつかの同時実行のヒントを含む素敵な記事では、例が次の行に最適化されました。
double getBalance() {
Account acct = verify(name, password);
synchronized(acct) { return acct.balance; }
}
私が正しく理解している場合、同期のポイントは、このスレッドによって読み取られる acct.balance の値が最新であること、および acct.balance 内のオブジェクトのフィールドへの保留中の書き込みもメイン メモリに書き込まれることを確認することです。 .
この例で少し考えさせられました: acct.balance (つまり、クラス Account のフィールド balance) を として宣言する方が効率的ではないでしょうvolatile
か? これはより効率的で、synchronize
acct.balance へのすべてのアクセスを節約し、acct
オブジェクト全体をロックしません。何か不足していますか?