揮発性変数の使用は、それを使用するときはいつでも同期ブロックを使用するよりもはるかに効率的であると言われています(読み取りまたは書き込み)。
Java 1.4 までは、その理由がわかりました (当時は、スレッドがすべてのアクセス可能なメモリをフラッシュおよびリフレッシュする必要がなかったからです)。
しかし、Java 1.5 以降、volatile 変数と同期ブロックの使用に見られる唯一の違いは、ロック取得メカニズムです。
ロックを取得するのは本当にそれほど高価ですか? もしそうなら、それはなぜですか?