• 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

     

     

     


     

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

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


  • 相关阅读:
    三分法
    牛客网 TaoTao要吃鸡 ( 0/1背包变形 )
    POJ 3275 Ranking the cows ( Floyd求解传递闭包 && Bitset优化 )
    Codeforces 912E Prime Gift ( 二分 && 折半枚举 && 双指针技巧)
    Codeforces 912D Fishs ( 贪心 && 概率期望 && 优先队列 )
    Codeforces 919D Substring ( 拓扑排序 && DAG上的DP )
    队列构造拓扑排序
    Codeforces 919E Congruence Equation ( 数论 && 费马小定理 )
    Codeforces 916B Jamie and Binary Sequence ( 模拟 && 思维 )
    POJ 1769 Minimizing maximizer ( 线段树 && DP )
  • 原文地址:https://www.cnblogs.com/guchunchao/p/10656492.html
Copyright © 2020-2023  润新知