zoukankan      html  css  js  c++  java
  • Concurrent并发工具集合简介

    ConcurrentHashMap: 一个高并发的HashMap

    CopyOnWriteArrayList : 这是一个list和ArrayList是 一族,在读多写少的场合,这个list性能非常好   (当写入当时候,先对数组进行了次复制,Arrays.copyof(oldArr,len+1),然后setArray(newArr))

    ConcurrentLinkedQueue:高效的并发队列(高并发中性能最好的队列),可以看作一个线程安全的LinkedList

    BlockingQueue:接口,JDK内部通过链表、数组等方式实现了这个借口,表示阻塞队列,非常适用于作为数据共享的通道。

      LinkedBlockingQueue适合做无界或者边界非常大的队列(因为内部可以动态增加)

      ArrayBlockingQueue更适合做有界队列,因为队列中可容纳的最大元素需要在队列创建的时候指定(毕竟数组的动态扩展不方便)

        poll() 得到一个头部元素,如果空直接返回null,  take()) 得到一个头部元素,如果空,会等待

        offer()插入一个元素,如果队列满了,返回false,put()插入一个元素,如果队列满了,就等待      

      public void put(E e) throws InterruptedException {
            checkNotNull(e);
            final ReentrantLock lock = this.lock;
            lock.lockInterruptibly();
            try {
                while (count == items.length)
                    notFull.await();
                enqueue(e);
            } finally {
                lock.unlock();
            }
        }

    ConcurrentSkipListMap:跳表的实现,这是一个map,使用跳表的数据结构进行快速查找

      1、跳表的一个特点是随机算法,跳表的本质是同时维护多个链表,并且链表分层(空间换时间)

       2、如上图,第二个特点,底层是顺序的,我们搜索55只需要2次查找即可。这个结构中,查询元素46仍然是最耗时的,需要查询5次。即首先在L3层查找2次,然后在L2层查找2次,最后在L1层查找1次,共5次。

       跳表实现Map和使用哈希方法实现map的另一个不同之处就是,哈希不会保存元素的顺序,而跳表内的元素是排序的。

  • 相关阅读:
    Office 2010激活 NO KMS products detected问题
    强制换行/不换行 (兼容IE)
    el-radio再次点击取消选中
    几个 JavaScript 实用小技巧
    微信小程序-点击事件传递参数
    微信小程序-存取本地缓存
    微信小程序-路由方式
    element-ui 表格排序失效
    watch监听(数组或者对象)
    vue 引入 base64或者md5对密码进行加密
  • 原文地址:https://www.cnblogs.com/sg9527/p/8005013.html
Copyright © 2011-2022 走看看