私は最近Apache Commons-IOのクラスCountingInputStream
を使用しました。カウンタフィールドを更新することによって、読み取られたバイト数を追跡するだけです。InputStreamを同期させることの利点は何ですか?
私は、カウンタがsynchronized
キーワードで更新されていることに気付きました。私が見つけることができる最高の情報源はIO-201ですが、理由は説明されていません。
私はApache Commonsコードが良質であることをいくつか読んでいますが、なぜ彼らがInputStreamでメソッドを同期させたのか不思議です。私は、スレッドの安全性がストリーム上で有用なプロパティであるとは考えていませんし、IO-201のコメント者もしません。
私はInputStreamに同時にアクセスしていないので、メソッドを同期させる有効な理由はありますか?または、データゴミを生成しないInputStreamに同時にアクセスする有効なユースケースがありますか?
私はデータゴミを取得せずにInputStreamを同時に読み取る方法を心配することはできません。だから私は同時性がこの '同期化 'の動機づけになることはできないと考えます。しかし、たぶん私の限られた想像力です。私は心配していない、私はちょうどそれから何かを学ぶための動機を理解したい。 –
わかりました。別のスレッドは 'getCount()'を呼び出すかもしれません。同期化アクションがなければ、メモリモデルが起動し、もう一方のスレッドはアップデートを見ることができません。私は満足しています。同期の代わりに揮発性でも、おそらく同じ仕事をするでしょうね。 –
いいえ、volatile変数をインクリメントするとスレッドセーフではありません。 –