是否有可能使用ConcurrentHashMap作爲後臺使用索引作爲鍵和元素作爲值的非阻塞線程安全列表?實現非阻塞線程安全列表
0
A
回答
2
這可能嗎?
答案是它取決於你需要的列表功能。
如果你只是想在「名單」上執行類似數組的操作(如獲取或定索引處設置元素),那麼就可以做到的。
如果您想要執行諸如插入或刪除元素或按順序迭代列表元素等操作,那麼操作必須被阻止,並且通常會很昂貴。
爲了說明,考慮在位置P
處插入元素的問題。爲此,您需要更改所有現有元素在P
及之後的位置。對於每一個,你需要從哈希映射中刪除元素,然後重新插入它。假設P
是隨機選擇的,則重新編號爲O(N)
,其中N
是「列表」長度。此外,重編號必須以原子方式完成,因此必須在相當長的時間內阻止其他操作。
1
當然可以。 javadoc提供了有關如何使用它的信息。
1.操作是線程安全的:HashMap中被阻斷,執行操作,HashMap的暢通等等
2.吸氣不阻止:它檢索最新的更新
3.你可以擴展你的HashMap蒙山此function
4.用put(鍵,值)添加元素;
5.您正在尋找
ConcurrentHashMap<Integer,String> map = new ConcurrentHashMap<Integer,String>(); //Creates a new, empty map with a default
// initial capacity (16), load factor (0.75) and concurrencyLevel (16).
map.put(map.size(),"Hello"); //put is blocking so you'll have the actual size (your index) at insertion time
0
沒有,因爲沒有辦法原子刪除元素。
您可以實現代碼以將後續元素向下移動,但這需要一些額外的編碼。
相關問題
- 1. 非阻塞線程安全內存池實現
- 2. 線程執行器非阻塞列表
- 3. 非阻塞線程
- 4. BoundedPriorityBlockingQueue - 線程安全,阻塞和有界?
- 5. 非阻塞線程安全文件寫入
- 6. 將線程阻塞轉換爲f中的非線程阻塞#
- 7. 實現鎖定和阻塞線程
- 8. 阻塞隊列不阻塞線程?
- 9. 阻塞隊列實現
- 10. 如何實現線程安全隊列
- 11. 線程安全隊列實現
- 12. 隊列阻塞主線程
- 13. 非阻塞IO如何實現?
- 14. 非阻塞隊列
- 15. 阻止阻塞的線程阻塞
- 16. 實現'線程安全的'鏈表
- 17. 網絡阻塞到非阻塞,只有線程作爲選項?
- 18. 單線程實現線程安全嗎?
- 19. 多線程與非阻塞套接字
- 20. 非阻塞UI線程動畫
- 21. mpi:阻塞與非阻塞
- 22. MessageBeep線程阻塞
- 23. 阻塞線程 - Java
- 24. Java線程阻塞
- 25. 無阻塞服務器和線程安全
- 26. 龍捲風線程安全無阻塞操作
- 27. 異步非阻塞循環與多線程的真實例子?
- 28. 發現阻塞線程二郎
- 29. 如何在Delphi中實現線程安全列表包裝?
- 30. 阻塞隊列的「聯合」的實現