美文网首页
Java并发容器和框架

Java并发容器和框架

作者: 全栈未遂工程师 | 来源:发表于2016-08-09 10:30 被阅读343次

    ConcurrentHashMap

    线程安全的Map。
    HashMap线程不安全,HashTable效率太低,于是有了ConcurrentHashMap。

    • get
    • put
    • size

    ConcurrentLinkedQueue

    线程安全的队列。
    线程安全的队列有两种方式:

    • 使用阻塞算法。入队和出队分别用锁实现。

    • 使用非阻塞算法。ConcurrentLinkedQueue就使用非阻塞算法。

    • 入队列
      有offer和add两种方法。add是继承List的,offer是继承Queue。add方法在容量满的时候抛出异常,offer在容量满的时候返回false。

    • 出队列

      • peek:获取但不移除此队列的头;如果此队列为空,则返回 null。
      • poll:获取并移除此队列的头,如果此队列为空,则返回 null。

    Java中的阻塞队列

    • 支持阻塞的插入方法:当队列满时,队列会阻塞插入元素的线程,直到队列不满。
    • 支持阻塞的移除方法:当队列空时,获取元素的线程会等待队列变为非空。
    方法/处理方式 抛出异常 返回特殊值 一直阻塞 超时退出
    插入方法 add(e) offer(e) put(e) offer(e,time,unit)
    移除方法 remove() poll() take() poll(time,unit)
    检查方法 element() peek() 不可用 不可用

    JDK7提供了7个阻塞队列

    • ArrayBlockingQueue:一个数组结构组成的有界阻塞队列。
      不保证线程公平的访问队列。
    • LinkedBlockingQueue:一个链表结构组成的有界阻塞队列。
      默认和最大长度为Integer.MAX_VALUE。
    • PriorityBlockingQueue:一个支持优先级排序的无界阻塞队列。
      可以自定义类实现compareTo(),也可是初始化的时候通过参数Comparator来对元素进行排序。
    • DelayQueue:一个使用优先级队列实现的无界阻塞队列。
      支持延时获取元素的无界阻塞队列。
      队列中的元素必须实现Delayed接口,在创建元素时可以指定多久才能从队列中获取当前元素,只有在延迟期满时才能从队列中提取元素。
    • SynchronousQueue:一个不存储元素的阻塞队列。
      一个不存储元素的阻塞队列,每一个put操作必须等待一个take操作,否则不能继续添加元素。SynchronousQueue可以看做一个传球手,把生产者的数据直接传递给消费者。
    • LinkedTransferQueue:一个链表结构组成的无界阻塞队列。
      新特性
      • transfer:若当前存在一个正在等待获取的消费者线程,即立刻移交之;否则,会插入当前元素e到队列尾部,并阻塞到该元素被消费者消费之后返回。
      • tryTransfer(E e):若当前存在一个正在等待获取的消费者线程(使用take()或者poll()函数),使用该方法会即刻转移/传输对象元素e;若不存在,则返回false,并且不进入队列。这是一个不阻塞的操作。
      • tryTransfer(E e,long timeout, TimeUnit unit):试图把生产者传入的元素直接传给消费者,如果没有消费者消费该元素则等待指定时间再返回,返回false,同时该元素被移除。如果在超过时间内消费了该元素,那么返回true。
    • LinkedBlockingDeque:一个链表结构组成的双向阻塞队列。

    相关文章

      网友评论

          本文标题:Java并发容器和框架

          本文链接:https://www.haomeiwen.com/subject/futdsttx.html