私は汎用のスレッドセーフなコレクションを持っていますが、Arraylistは静的な同期メソッドでスレッドセーフに簡単に使用できることがわかりましたが、このArrayListは汎用性がないため、それらをキャストする。これを行う簡単な方法はありますか?他のリストタイプも可能です。スレッドセーフなジェネリックarraylist?
1
A
答えて
3
少し知識は危険なことです;-)はい、あなたはメタナイトの提案を使用してSyncRoot
を使用することができますが、あなたは注意する必要がある - それは万能薬ではありません。マイクロソフトのBCLチームブログのthis postを参照して、SyncRoot
という単純な理由がわからない理由を確認してください。その記事からの引用:
私たちの一般的な コレクションのいくつかの抜け目のないユーザーは、我々はもはや が
ICollection<T>
と
にパブリック
SyncRoot
プロパティを提供することを認められていない私たちだと思います 人々がより多くのことをもっと重く考えるように強制する方が良い 同期、そして率直にaSyncRoot
一般的な コレクションのプロパティは値を提供しません。
もちろん、それはどのような状況でも使用できないというわけではありません。ユースケースを慎重に考え、自動操縦しないでください。
3
あなたは同期メソッドは、まだこれは言っているに関するMSDNで読む場合:。
「コレクションの列挙本質的にはスレッドセーフな処理ではないコレクションが同期されている場合でも、他のスレッドがまだコレクションを変更することができます列挙中にスレッドの安全性を保証するために、列挙全体でコレクションをロックするか、他のスレッドによって加えられた変更に起因する例外をキャッチすることができます。
3
List(T)ラッパーを作成し、SyncRootプロパティとのアクセスを同期させることができます。
MSDNの例:
ICollection ic = ...;
lock (ic.SyncRoot)
{
// Access the collection.
}
関連する問題
- 1. スレッドセーフと静的クラスのジェネリック
- 2. ジェネリックassertThat(ArrayListを、hasItems(InstanceOfSomeInterface))
- 3. ArrayListのジェネリック:ダイヤ内のインターフェイス
- 4. JSONArrayをジェネリックArrayListに解析する
- 5. ArrayList(Collection <? extends E> c)スレッドセーフですか?
- 6. PHPスレッドセーフでWindows用でないスレッドセーフ
- 7. スレッドセーフなキュー
- 8. スレッドセーフなC++スタック
- 9. C#:スレッドセーフなイベント
- 10. スレッドセーフなログ
- 11. スレッドセーフな処理
- 12. スレッドセーフなLparallel.queue?
- 13. スレッドセーフなインスタンスフィールド
- 14. スレッドセーフな乱数
- 15. スレッドセーフなpthreadミューテックスロックラッパー
- 16. C++スレッドセーフなブラケットオペレータプロキシ
- 17. スレッドセーフなリファクタリング
- 18. スレッドセーフなnsdictionary
- 19. スレッドセーフなOutputStreamWriter
- 20. スレッドセーフな設定
- 21. スレッドセーフな実装
- 22. スレッドセーフなメモ化
- 23. スレッドセーフなソートコレクション
- 24. スレッドセーフなインクリメントC#
- 25. スレッドセーフなForm.Show
- 26. ジェネリックにArraylistベースのバッグ/マルチセットを実装する
- 27. ArrayListとインタフェース継承のジェネリック型の問題
- 28. のJavaのArrayListのaddAllジェネリック型を持つ
- 29. Java arraylistにジェネリック型のデータを格納する方法
- 30. JPAのスレッドセーフなエンティティ
はい、おそらく他のソリューションでもArrayListをラップできますか? :) –