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

  • 相关阅读:
    SQL数据库优化总结
    数据库设计的三大范式
    springmvc的原理与流程
    flask实现文件下载功能
    python操作excel向同一sheet循环追加数据
    python操作es处理超过10000条数据报错查询不到
    CentOS 安装rz和sz命令 lrzsz实现文件传输
    centOS安装ElasticSearch
    gunicorn启动fastapi命令
    如何获取协程的返回值
  • 原文地址:https://www.cnblogs.com/zhy-study/p/9398836.html
Copyright © 2011-2022 走看看