如何實現 List 集合的線程安全


  在實際項目開發中,List 集合較為常用,相比於數組,其提供了更多的方法,便於遍歷、搜索、添加與移除。常見的有 ArrayList、Vector等。

   關於ArrayList

  中所周知,ArrayList不是線程安全的,在多線程開發時,我們不能采取多個線程同時操作 ArrayList,比如我們不能一個線程向 ArrayList中添加元素,一個線程從其中 刪除元素,這時會拋ConcurrentModificationException異常。關於這個異常,在上一篇博文中,也有涉及,具體可見:https://www.cnblogs.com/Demrystv/p/11494316.html

  關於Vector

  Vector是線程安全的,但是其比較笨重,看其源碼發現其只是在每個方法上 加上 synchronized 關鍵字,因此雖然其可以保證線程安全,但是效率低下,在實際開發中不推薦使用。

  

  

  

 

   關於Collections.synchronizedList(List list)

  其使用方法如下, List<String> list = Collections.synchronizedList(new ArrayList<>());  在使用 Collections.synchronizedList(List list) 時,可以像 普通的 ArrayList 那樣添加元素,但是在多線程開發中,對其進行遍歷,需要添加 synchronized 關鍵字,這是為什么呢?還是老規矩----看源碼!!!

      

  看源碼截圖中,藍色框中關於 add、index 等方法中都是帶有synchronized 關鍵字,但是在 iterator 中沒有synchronized 關鍵字,因此上面的疑問迎刃而解!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM