>>492
hogeが単なる一つのint変数ならその推理は正しい。
ていうかその場合は更新するほうのsynchronizedもいらない。

なぜなら
プリミティブ変数一つの更新がスレッドセーフであることは言語仕様で保証されているから。
(ただしint以下の大きさのもの)

だから
更新メソッドに排他がかかっているってことは2つ以上のプリミティブ変数またはオブジェクト等が
更新されているということ。
当然、読み出し側も複数の変数を参照したりして計算した結果を返す必要があるだろう。

このとき排他がかかっていないと
更新中のハンパなタイミングで結果を計算してしまう可能性がある。