フィールドを持つ共有オブジェクトがあるとしましょうdata
。複数のスレッドは、フィールドにアクセスするためにこのオブジェクトへの参照を共有します。ただし、スレッドがオブジェクトに同時にアクセスすることはありません。data
揮発性として宣言する必要がありますか?
このような状況は次のようになります。
- クラス
Counter
は、一意のフィールドvalue
と1つのメソッドを定義しincrement
ます。 - スレッドはカウンターをインクリメントし、次にカウンターをインクリメントする別のスレッドを生成します。
プログラムのロジックそのものを考えると、カウンターへの同時アクセスはありません。ただし、カウンターは複数のスレッド間で共有されます。カウンターは揮発性でなければなりませんか?
この状況の別の変形は、複数のスレッドがプレーンデータであるオブジェクトXを操作するが、同時実行制御( wait
、、)に依存する別のオブジェクトYを介して一時的な実行を交互に行う場合です(Xが同時にアクセスされることはありません)。オブジェクトXのフィールドは揮発性である必要がありますか?notify
synchronize