ConcurrentHashMap弱一致性迭代器

什麼是弱一致性迭代器???

當創建迭代器後,其他線程刪除了該元素時候並不會拋出java.util.ConcurrentModificationException異常,能夠保持創建迭代器後的元素被正確的Iterator.next()出來。例如ConcurrentHashMap就是弱一致性迭代器,HashMap就是強一致性迭代器。

通過下面代碼部分,我們可以更好的理解弱一致性和強一致性迭代器。

package com.iterator;

import java.util.HashMap;
import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;

/**
 * ConcurrentHashMap弱一致性主要是爲了提升效率,是一致性與效率之間的一種權衡,HashMap強一致性迭代器
 *
 * @author 小輝GE/小輝哥
 * <p>
 * 2019年8月25日 下午20:00:00
 */
@SuppressWarnings("unused")
public class ConsistentIterationMap {

	public static void main(String[] args) {
//		HashMap<String, String> map = new HashMap<String, String>();
		ConcurrentHashMap<String, String> map = new ConcurrentHashMap<String, String>();
		map.put("people1", "張三");
		map.put("people2", "李四");
		map.put("people3", "王五");
		map.put("people4", "趙六");

		Iterator<String> it = map.values().iterator();
		new Thread(()->{
			map.remove("people2");
		}).start();
		while(it.hasNext()){
			System.out.println(it.next());
		}
	}
}

採用ConcurrentHashMap測試輸出結果如下:

採用HashMap測試輸出結果如下:

結果分析:

我們可以看出ConcurrentHashMap可以正常輸出結果,HashMap拋出ConcurrentModificationException異常。其實ConcurrentHashMap弱一致性主要是爲了提升效率,是一致性與效率之間的一種權衡,HashMap強一致性迭代器。

以上代碼僅供參考,如有不當之處,歡迎指出!!!

更多幹貨,歡迎大家關注和聯繫我。期待和大家一起更好的交流、探討技術!!!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章