java併發下修改arrayList---CopyOnWriteArrayList

背景:我將配置文件保存在ArrayList中, 多線程併發讀取配置.但是我每5分鐘 會去掃描一下配置文件,如果修改了配置文件 就會重新加載新的配置文件. 但在多線程共享同一個資源下修改就會拋出Java.util.ConcurrentModificationException錯誤.這裏有兩種解決方法:

第一種方法是:加鎖

缺點:性能差   優點:保證數據的實時一致性   修改後就可以讓接下來的線程讀取新的內容


第二種方法是:使用  Copy-On-Write容器

java 1.5提供的COW容器 包含 CopyOnWriteArrayList類和CopyOnWriteArraySet類,但是並沒有提供CopyOnWriteMap的實現.

CopyOnWrite容器即寫時複製的容器。通俗的理解是當我們往一個容器添加元素的時候,不直接往當前容器添加,而是先將當前容器進行Copy,複製出一個新的容器,然後新的容器裏添加元素,添加完元素之後,再將原容器的引用指向新的容器。這樣做的好處是我們可以對CopyOnWrite容器進行併發的讀,而不需要加鎖,因爲當前容器不會添加任何元素。所以CopyOnWrite容器也是一種讀寫分離的思想,讀和寫不同的容器。


優點:不加鎖 性能高

性能上可以看一下:http://blog.csdn.net/wind5shy/article/details/5396887


缺點:    內存佔用問題和數據一致性問

可以看一下:http://ifeve.com/java-copy-on-write/






發佈了34 篇原創文章 · 獲贊 45 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章