ConcurrentHashMap的特殊之處 (遍歷的同時修改)
阿新 • • 發佈:2019-01-30
- HashMap、arralist、linkedlist、vector不允許通過Iterator遍歷的同時修改,而ConcurrentHashMap允許該行為,並且該更新對後續的遍歷可見
public class Qiao { public static class T1 extends Thread { private List<Integer> list; public T1(List<Integer> list) { this.list = list; } public void
結果:
Exception in thread "Thread-0" java.util.ConcurrentModificationException
at java.util.Vector$Itr.checkForComodification(Vector.java:1184)
at java.util.Vector$Itr.next(Vector.java:1137)
at cn.quantgroup.pinjamancepat.controller.Qiao$T1.run(Qiao.java:19)
Process finished with exit code 0
public class Qiao2 { public static class T1 extends Thread { private Map map; public T1(Map map) { this.map = map; } public void run() { for (Object a : map.entrySet()) { } } } public static class T2 extends Thread { private Map map; public T2(Map map) { this.map = map; } public void run() { for (Object a : map.keySet()) { map.remove(a); } } } public static void main(String[] args) { Map map = new ConcurrentHashMap(); for (int i = 0; i < 10000; i++) { map.put(i, i + 1); } T1 t1 = new T1(map); T2 t2 = new T2(map); t1.start(); t2.start(); } }
結果:Process finished with exit code 0