在實際項目開發中,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 關鍵字,因此上面的疑問迎刃而解!!