JUC--ConcurrentHashMap

HashMap HashTable

HashTable锁住整个表  会存在复合操作上的问题“若不存则添加” “若存在则删除” 也是不安全的  效率低

 

ConcurrentHashMap:采用锁分段机制  并发级别:concurrentLevel并发级别 默认16  

  支持多个thread同事访问一个hashmap 并且线程安全

jdk1.8 将锁分段改成CAS

ConcurrentSkipListMap通常优于同步的TreeMap

当期望的读书和遍历远远大于列表的更新数时,CoprOnWriteArrayList优于同步的ArrayList

 

 

CopyOnWriteArrayList:在迭代的同时 向list中添加数据 发生并发修改该异常ConcurrentModificationException

public class TestCOAL {
    public static void main(String[] args) {
        for(int i=0;i<10;i++){
            new Thread(new HelloThread()).start();
        }
    }
}
class HelloThread implements  Runnable{
    private static List<String> list =Collections.synchronizedList(new ArrayList<>());
    static {
        list.add("AA");
        list.add("BB");
        list.add("CC");
    }
    @Override
    public void run() {
        Iterator<String> it = list.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
            list.add("AA");
        }
    }
}

使用CopyOnWriteArrayList能够解决以上问题:写入并复制

 

private static List<String> list =new CopyOnWriteArrayList<>();

CopyOnWriteArrayList进行添加操作多的时候 效率低,每次都要复制  当进行并发迭代操作多时可以选择。

 

posted @ 2018-07-31 23:05  zghgz  阅读(112)  评论(0编辑  收藏  举报