zoukankan      html  css  js  c++  java
  • Java并发编程之——并发集合

    并发集合是原有集合框架的补充,为多线程并发程序提供了支持。主要有:BlockingQueue,ConcurrentMap,ConcurrentNavigableMap三个接口

    新的java.util.concurrent包可用的具体集合类中加入了BlockingQueue接口和5个阻塞队列类。阻塞队列实质上就是一种有点扭曲的FIFO数据结构,不是立即从队列中添加或删除元素,线程执行操作被阻塞,直到有空间或元素可用。生产者中 put()操作会在没有空间可用时阻塞,而消费者的take()操作会在队列中没有任何东西时阻塞。

    五个队列所提供的各有不同:

     ArrayBlockingQueue :一个由数组支持的有界队列。

     LinkedBlockingQueue :一个由链接节点支持的可选有界队列

     PriorityBlockingQueue :一个由优先级堆支持的无界优先队列,它利用所包含元素的 Comparable 排序顺序来以逻辑顺序维护元素。可以将它看作TreeSet的替代物

     DelayQueue :一个由优先级堆支持的、基于时间的调度队列。

     SynchronousQueue :一个利用 BlockingQueue 接口的简单聚集(rendezvous)机制。

     使用 ConcurrentMap 实现类java.util.concurrent.ConcurrentMap 接口和 ConcurrentHashMap实现类只能在键不存在时将元素加入到map中,只有在键存在并映射到特定值时才能从map中删除一个元素。主要定义了以下几个方法:

    V putIfAbsent(K key,V value):如果指定键已经不再与某个值相关联,则将它与给定值 关联。boolean remove(Object key,Object value):只有目前将键的条目映射到给定值时,才移除 该键的条目。

    boolean replace(K key,V oldValue,V newValue):只有目前将键的条目映射到给定值时, 才替换该键的条目。ConcurrentMap中定义的方法是原子性的

    CopyOnWriteArrayList CopyOnWriteArraySet

    对于新的 CopyOnWriteArrayList 和 CopyOnWriteArraySet 类,所有可变的(mutable)操作都首先取得后台数组的副本,对副本进行更改,然后替换副本。这种做法保证了在遍历自身可更改的集合时,永远不会抛出ConcurrentModificationException.遍历集合会用原来的集合完成,而在以后的操作中使用更新后的集合。

  • 相关阅读:
    2017《Java技术》预备作业 计科1501 杨欣蕊
    Java技术预备作业02杨欣蕊
    系统无法从光盘启动
    动态数组ArrayList的使用
    dbgrid数据显示和数据源不同
    异步任务判断服务器是否开启
    Java字符串格式化
    思科2960 监听端口设置
    64位win7安装jdk和eclipse
    Delphi临界区的使用
  • 原文地址:https://www.cnblogs.com/wn398/p/3130977.html
Copyright © 2011-2022 走看看