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

 

 

 


 

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

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

 


 

 

 

 

 

 

 

 

 

posted @ 2019-04-04 18:40  超轶绝尘  阅读(382)  评论(0编辑  收藏  举报