誰もがスレッドセーフではなく、複数のスレッドで使用されているJavaでコレクションを変更した場合の結果を教えてください。スレッドセーフではないコレクションを変更する
1
A
答えて
0
結果は未定義で、ややランダムです。
高速で動作しないように設計されたJDKコレクションでは、ConcurrentModificationExceptionが発生することがあります。これは、他のクラスとは対照的に、コレクションでスレッドの安全性に特有の唯一の結果です。スレッドセーフでないクラスと一般的に発生し
問題が発生する可能性があります。
- コレクションの内部状態が壊れている可能性があります。
- 突然変異は成功したように見えるかもしれませんが、変更は実際にはいつでも他のスレッドには見えません。最初は目に見えず、後で見ることができます。
- 軽負荷では実際には成功するかもしれませんが、競合しているスレッドがたくさんあるため、重い負荷でランダムに失敗します。
- 上記のコメントに記載されているように、競合状態が発生する可能性があります。
他にもたくさんの可能性がありますが、どれも楽しいものはありません。最悪の場合、これらのことは、システムがストレスを受けているときに、生産において最も一般的に明らかになる傾向があります。
要するに、あなたはおそらくそれをしたくありません。
0
データ構造の不変量は保証されません。スレッド1がDSスレッド1に追加している間にスレッド2が読み取りを行う場合、スレッド2は要素がまだ追加されていないと見なすことができる。
スレッドセーフではないデータ構造がたくさんありますが、それでもマルチスレッド環境では機能する(つまりスローされない)と思われます。また、特定の状況下で正しく実行することもできますデータ構造への任意の書き込み)。
このトピックを十分に理解するには、並行システムで発生するさまざまな種類のバグを調べることをお勧めします。この短い文書は、良いスタートのようです。
0
最も一般的な結果は、それが動作するように見えますが、すべての時間を動作しません。
これは、あなたが
-
つのマシン上で動作しますが、他にはない
- 問題を抱えている意味することができます。
- はしばらくは動作しますが、明らかに無関係な変更やプログラムが中断します。
- スレッドセーフなデータ構造を使用していない場合は、マルチスレッドの問題かどうかわからないときはいつでもバグがあります。
何が起こる可能性がありますか。
- あなたはめったに/ランダム唯一のオプションはであり、あなたのコードは無限ループに入り、(HashMapのは、これを行うために使用される)動作を停止し、エラーや奇妙な動作
を取得します。
- スレッド間で共有される状態の量を制限します。理想的には全くありません。
- データの更新方法には十分注意してください。
- 単体テストに依存していないので、コードが何をしているのか理解して、すべての可能な状況で正しく動作することを確認する必要があります。
関連する問題
- 1. スカラ不変なコレクションはスレッドセーフですか?
- 2. fastutilsでスレッドセーフで不変なコレクションを実現するには?
- 3. Scalaコレクションをスレッドセーフに更新する
- 4. - スレッドセーフなコレクション修正
- 5. チェーンされたスレッドセーフなコレクションはスレッドセーフですか?
- 6. VectorとHashtableはコレクションのスレッドセーフですか?
- 7. ScalaでAkkaアクターのスレッドセーフなコレクション
- 8. mongo_c_driverの異なるコレクションのスレッドセーフ
- 9. スレッドセーフUIImageサイズ変更?
- 10. このシナリオでは、どのスレッドセーフなコレクションが適切ですか?
- 11. 変更可能なマップの値をスレッドセーフに変換する
- 12. Pythonスレッドセーフでクラス変数を変更していますか?
- 13. 静的コレクションへのスレッドセーフなアクセス
- 14. スレッドセーフな列挙、Cでのコレクションの追加または削除#
- 15. dispatch_async更新変数クラッシュ - スレッドセーフ
- 16. lockキーワードとスレッドセーフなコレクションを使用する場合
- 17. 変更可能なHashMap値を変更可能なコレクションで更新します。
- 18. グローバルレベルでmongoDBコレクションを定義する理由 - スレッドセーフです
- 19. PHPスレッドセーフでWindows用でないスレッドセーフ
- 20. ResultSetFutureでコレクションを変更する
- 21. SwingWorkerのスレッドセーフ - スレッドセーフな方法でJTableを更新
- 22. 変更不可能なコレクションを変更する方法はありますか?
- 23. System.Collections.Concurrentコレクションの拡張メソッドはスレッドセーフですか?
- 24. バックボーンはコレクションのコレクションの変更イベントをリッスンします
- 25. スケジューラでアクティブなコレクションを更新する
- 26. PowerShell - コレクションを列挙してコレクションを変更する
- 27. は、スレッドセーフなjavax.sql.DataSourceですか?
- 28. ArangoDBコレクションのプロパティを変更する(keyOptions)
- 29. jquery内のjsonコレクションを変更する
- 30. Meteorのコレクション値を変更する
結果:コレクションの内部構造が壊れている可能性があります。 – Andreas
[Nasal demons。](http://www.catb.org/jargon/html/N/nasal-demons.html)つまり、悪魔はあなたの鼻から飛び出すことがあります。 –
関連:http://stackoverflow.com/questions/22632552/concurrent-add-on-non-threadsafe-hashset-what-is-the-worst-that-could-happen – Marco13