私はArrayList<ConcurrentLinkedQueue>
を反復処理するワーカースレッドを持っています。他のスレッドはオブジェクト(キュー)を追加したり削除したりすることができます。しかし、ArrayListはスレッドセーフではありません。 ArrayList<ConcurrentLinkedQueue>
の代わりにConcurrentLinkedQueue<ConcurrentLinkedQueue>
を使用しても問題ありませんか?ListではなくJava ConcurrentLinkedQueue?
0
A
答えて
2
ConcurrentLinkedQueue
を安全に反復できるかどうかを確認する場合は、答えはYesです。 javadocは言う:
Iterators
は、イテレータの作成時または以来、いくつかの点でキューの状態を反映する要素を返し、弱い一貫しています。 彼らはConcurrentModificationException
を投げず、他の操作と並行して進めることができます。イテレータの作成以降にキューに含まれる要素は、一度だけ返されます。
はしかし、あなたはQueue
上で行うことはできませんList
上にできることがある(例えば、位置取得/設定、任意の要素の挿入/除去が。)アプリケーションがこれらの事を行う必要があるか類似している場合ArrayList
の代わりにConcurrentLinkedQueue
を使用すると動作しません。
また、ConcurrentLinkedQueue.size()
がO(N)
操作であることに注意してください。
関連する問題
- 1. LinkedListとConcurrentLinkedQueue
- 2. java linked listコピーコンストラクタ
- 3. ConcurrentLinkedQueueは削除されません
- 4. ApacheのスパークDATAFRAME:df.where()は、Javaで:List属性
- 5. Entity Frameworkが空のListではなくList <>を返すのはなぜですか?
- 6. LinkedBlockingQueueとConcurrentLinkedQueueの違いは何ですか?
- 7. Java - バイナリファイルI/O with array-list
- 8. Java ListインターフェイスがgetLast()をサポートしないのはなぜですか?
- 9. list [-1:] [0]とlist [len(list)-1]の違いは何ですか?
- 10. Java汎用タイプ:List <?数を拡張>とList <Tは数>
- 11. ConcurrentLinkedQueueは期待通りに動作しません
- 12. Javaのジェネリックでは、List <?スーパーストリング>平均?
- 13. ConcurrentLinkedQueueを非アトミック操作で使用する
- 14. 多態性: "ArrayList list = new ArrayList"の代わりに "List list = new ArrayList"を使用するのはなぜですか?
- 15. Java辞書<String、List <Object>>
- 16. Javaの一覧/ Array Listの明確化
- 17. のJava 7ではなくJavaの6:「抽象的ではなく、抽象メソッドをオーバーライドしない」
- 18. Document List APIリクエストのクォータはどのくらいですか?
- 19. なぜリスト[:: - 1]が等しくないリスト[:len(list): - 1]ですか?
- 20. List内にある文字列を取得List <String> List内の文字列を除く<String[]>
- 21. JavaのListまたはArrayListの宣言の違いは何ですか?
- 22. std :: listの演算子[]がないのはなぜですか?
- 23. なぜstd :: listはC++ 11上で大きくなっていますか?このコードで
- 24. Python scipy:**またはpow()のサポートされていないオペランドタイプ: 'list'と 'list'
- 25. Expand List List with animationアニメーション
- 26. Javaの単純なFTPクライアントは、パッシブモードで「list」コマンドを1回だけ送信できます
- 27. Jsoup.connect()は、AndroidではなくJavaで動作します。
- 28. HttpPostはAndroidプロジェクトではなくJavaプロジェクトで動作します
- 29. なぜCollections.sort(List)はJava 8で動作しますか?CopyOnWriteArrayListでは動作しますが、Java 7では動作しません。
- 30. なぜJavaメタプログラミングのサポートは良くないのですか?
'List'はインターフェイスです。いくつかの実装はスレッドセーフ(例えば 'CopyOnWriteArrayList')、他は実装されていません(例えば' ArrayList')。 –
違いは何ですか?なぜ、ConcurrentLinkedQueueは機能しないのですか、それとも悪いのですか? – stonar96
私はそれがあなたが何をする必要があるかによって異なると思う。私はあなたの要件についてさらに詳しく述べたいと思います。 –