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的另一个不同之处就是,哈希不会保存元素的顺序,而跳表内的元素是排序的。

posted on 2017-12-08 13:44  一个帅哥9527  阅读(324)  评论(0编辑  收藏  举报