Java並發機制(5)--同步容器與並發容器

來源:互聯網
上載者:User

標籤:htable   容器類   map   容器   mod   出現   迭代   exception   add   

Java並發編程:同步容器
整理自:部落格園-海子-http://www.cnblogs.com/dolphin0520/p/3933404.html
1、同步容器出現原因
常用的ArrayList,LinkedList,HashMap,HashSet,Deque等都是線程不安全的;
Java為方便多線程編程,提供了同步容器供使用者使用。
2、同步容器類:
2.1:第一類:Vector(ArrayList)、Stack(Vector的子類)、HashTable(HashMap)
2.2:第二類:Collections類中提供的靜態Factory 方法建立的類。如Collections.synchronizedXxx()擷取
3、同步容器的缺陷:
3.1:使用synchronized關鍵字進行同步降低了效率;
3.2:像Vector這種add和get方法都進行同步,在多線程讀時,競爭鎖,效率很低。
3.3:多線程操作同步容器時,可能拋出 ConcurrentModificationException異常。
4、ConcurrentModificationException異常原因及解決
4.1:單線程下:Iterator迭代器迭代時,調用了list的remove修改了容器大小,應該調用Iterator的remove方法;
4.2:多線程下:多個線程執行Iterator並修改,此時Iterator線程私人。
改正:【1】擷取Iterator時,使用synchronized或者Lock同步。
【2】使用並發容器CopyOnWriteArrayList代替ArrayList和Vector

5、並發容器:java.util.concurrent包
同步容器將所有對容器狀態的訪問都序列化,保證了安全,卻降低了效率;
5.1:ConcurrentHashMap代替同步的Map(Collections.synchronized(new HashMap()),HashMap同步時鎖住所有的段,而ConcurrentHashMap只鎖住對應的段(segment);
5.2:CopyOnWriteArrayList和CopyOnWriteArraySet分別代替List和Set,寫時複製List和寫時複製set;
5.3: 其他

Java並發機制(5)--同步容器與並發容器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.