3
A
回答
3
如果你有大部分是讀操作,很少有寫操作,你沒有太多的元素,那麼你可以使用CopyOnWriteArrayList
,因爲它是一個無鎖執行List
讀取操作,使它幾乎不可能更快,但它是非常昂貴的寫操作至於每一個寫,它重新構建整個List
能夠爲下一次讀取操作提供新的只讀副本。
至於你的情況,你有很多的寫操作和大量元素來把你的收藏,CopyOnWriteArrayList
顯然不是一個選擇。
我在你的情況下建議使用一個線程安全的Queue
,你可以找到java.util.concurrent
包。根據你的情況和你的JDK版本是最好的選擇可能會改變,但如果你不特別需要一個blocking queue
或deque
但只有pure collection
,最好的選擇可能是ArrayBlockingQueue
,ConcurrentLinkedQueue
或LinkedBlockingQueue
但根據該benchmark result(略位老),LinkedBlockingQueue
提供了最好的整體表現。
但是,當我們談論的表演,第一個和最重要的建議是:總是在你的目標環境中進行測試,它是知道什麼是適合你的最佳選擇的唯一有效途徑。
3
0
最大將是10K元素
如果你有一個非常低的更新速率,是的CopyOnWriteArrayList一個可能的解決方案。這將有效地實現併發讀取。
您遇到的問題是併發和有序是相反的擔憂。要進行訂購,您需要序列化更新以確定訂單。要具有併發性,您需要放棄排序。
有一個的ConcurrentLinkedQueue,然而,這僅允許併發讀(1),寫(1)
相關問題
- 1. 維護訂單的鍵/值集合
- 2. 如何使用UUID維護廣告訂單
- 3. Parallel.Foreach維護收集訂單嗎?
- 4. 廣告合併?
- 5. 展平SetMultiMap並保留廣告訂單
- 6. Tensorflow:批量維護訂單
- 7. BCP維護插入訂單
- 8. 維護Backbone集合參考
- 9. DownloadStringAsync維護訂單的多個URL
- 10. 通過兩個按查詢排序的聯合維護訂單
- 11. 維護對象的有序集合
- 12. 維護MongoDB集合的順序
- 13. 維護插入順序的Java集合
- 14. 在R中維護原始訂單
- 15. 如何維護訂單優先級
- 16. 在Tkinter堆疊訂單維護
- 17. 架構:維護訂單歷史
- 18. 通過搜索維護訂單
- 19. DB架構:維護項目訂單
- 20. Mongoid:HABTM不保留廣告訂單
- 21. 字典到列表廣告訂單
- 22. Sphinxsearch維護sql的訂購
- 23. 如何維護單個文件中的魚類功能集合?
- 24. 算法/圖表:維護集合
- 25. 在List/ObservableCollection中維護集合
- 26. 維護併發作業的集數w/bash中從文件ARGS
- 27. Android開發:StartApp新sdk廣告整合不顯示廣告
- 28. 將單詞從文件讀入集合,維護順序
- 29. 合併Igraph時維護屬性名稱
- 30. 合併,排序,維護行順序
你正在尋找一個列表或一組?因爲清單按定義維護廣告訂單。 – Mena
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html –
可能有[在Java的JDK中有併發列表?](http:// stackoverflow。 com/questions/6916385/is-there-a-concurrent-list-in-javas-jdk) –