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

  • 相关阅读:
    Asp.Net服务器Cassini
    Vista系统Administrator帐户的激活与禁用
    SqlServer中的Top * With Ties
    SqlServer建远程服务连接
    SqlServer2005安装成功后补加Sa用户
    列出某个表中所有的列名
    水晶报表周期性打开报表失败
    Asp.net中文cookie的乱码问题
    HTML数据库编程、JavaScript数据库编程
    试图索引的限制
  • 原文地址:https://www.cnblogs.com/sg9527/p/8005013.html
Copyright © 2011-2022 走看看