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

     

     

     


     

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

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


  • 相关阅读:
    【转】Oracle 建立索引及SQL优化
    SQL Server Express LocalDB 存入中文产生乱码问题
    安装(c)npm及搭建Vue项目详解
    【转】VSCode 调试 Node.js 介绍
    【转】C#根据用户信息,生成token和cookie的方法
    远程连接 Docker 的 MySQL 服务
    mysql服务器和服务器启动程序
    一台物理机上运行多个mysql实例(Running Multiple MySQL Instances on One Machine)
    mysql5.7主从切换(master/slave switchover)
    选项文件(Option Files)/配置文件(Configuration Files)的使用
  • 原文地址:https://www.cnblogs.com/guchunchao/p/10656492.html
Copyright © 2011-2022 走看看