zoukankan      html  css  js  c++  java
  • java Concurrent并发容器类 小结

    Java1.5提供了多种并发容器类来改进同步容器的性能。

    同步容器将所有对容器的访问都串行化,以实现他们的线程安全性。这种方法的代价是严重降低并发性,当多个线程竞争容器的锁时,吞吐量将严重减低。

     一、基础集合替代的同步类

    ConcurrentHashMap 替代同步的且基于散列的MapHashTable、Collections.synchronizedMap(new HashMap());

    CopyOnWriteArrayList用于在遍历操作为主要操作的情况下替代同步的ListVector ,或是Collections.synchronizedMap(new ArrayList());

    CopyOnWriteArraySet 用于在遍历操作为主要操作的情况下替代同步的SetCollections.synchronizedMap(new HashSet());

    二、有序集合替代的同步类

    ConcurrentSkipListMap 替代 同步的 SortedMap  : Collections.synchronizedMap(new TreeMap())

    ConcurrentSkipListSet  替代 同步的 SortedSet   :   Collections.synchronizedMap(new TreeMap(new TreeSet()))

    三、阻塞与非阻塞队列

    Queue : 用来临时处理一组等待处理的数据,非阻塞,如果为空,获取元素的返回值为null。用LinkedList实现的。

      ConcurrentLinkedQueue:先进先出

      PriorityQueue:非并发的优先队列

    BlockingQueue:阻塞队列,拓展了Queue,增加了可阻塞的插入和获取等操作,如果队列为空,那么获取元素操作将一直阻塞。用于生产者消费者模式中。


    四、双端队列 : 实现了在队列头和队列尾的高效插入和移除。

    适用模式:工作密取(Work Stealing)。

    Deque extends Queue

     

    • ArrayDeque
    • ConcurrentLinkedDeque
    • LinkedList

     

    BlockingDeque extends BlockingQueue

      

    • LinkedBlockingDeque

     

     

     


     

    生产者——消费者模式  |  阻塞队列 | 所有消费者消费同一个队列 | 多线程并发竞争队列

    工作密取        |  双端队列 | 即是生产者又是消费者   | 消费线程消费自己的队列头,不竞争!消费没自己的再消费其它队列的尾,不竞争


  • 相关阅读:
    函数练习之计算机
    函数练习小程序
    Java—Day5课堂练习
    mysql-用户权限管理
    liunx-tail 实时显示文件内容
    Linux-diff --比较两个文件并输出不同之处
    linux-查找某目录下包含关键字内容的文件
    mysql-允许远程连接
    mysql-基本操作
    liunx-指令
  • 原文地址:https://www.cnblogs.com/guchunchao/p/10656492.html
Copyright © 2011-2022 走看看