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进行添加操作多的时候 效率低,每次都要复制 当进行并发迭代操作多时可以选择。