`

54、java.util.concurrent.阻塞队列和并发安全集合

 
阅读更多

一、可阻塞的队列

 

  • 队列包含固定长度的队列和不固定长度的队列
  • ArrayBlockingQueue,只有put方法和take方法才具有阻塞功能
    /**
     * java.util.concurrent.ArrayBlockingQueue<E>
     * 一个由数组支持的有界阻塞队列。
     * 此队列按 FIFO(先进先出)原则对元素进行排序。
     * 队列的头部 是在队列中存在时间最长的元素。队列的尾部 是在队列中存在时间最短的元素。
     * 新元素插入到队列的尾部,队列获取操作则是从队列头部开始获得元素
     * 这是一个典型的“有界缓存区”,固定大小的数组在其中保持生产者插入的元素和使用者提取的元素。
     * 一旦创建了这样的缓存区,就不能再增加其容量。试图向已满队列中放入元素会导致操作受阻塞;试图从空队列中提取元素将导致类似阻塞
     */
    public class ArrayBlockingQueue<E>extends AbstractQueue<E>implements BlockingQueue<E>, Serializable
    {
    	//创建一个带有给定的(固定)容量和默认访问策略的 ArrayBlockingQueue。
    	ArrayBlockingQueue(int capacity){}
    
    	//将指定的元素插入此队列的尾部,如果该队列已满,则等待可用的空间
    	public void put(E e)
             throws InterruptedException{}
    
    	//获取并移除此队列的头部,在元素变得可用之前一直等待(如果有必要)。
    	public E take()
           throws InterruptedException{}
    }
     

二、并发 Collection

 

  • 软件包 java.util.concurrent除队列外,还提供了设计用于多线程上下文中的
  • Collection 实现:ConcurrentHashMap、ConcurrentSkipListMap、ConcurrentSkipListSet、CopyOnWriteArrayList 和 CopyOnWriteArraySet。
  • 当期望许多线程访问一个给定 collection 时,ConcurrentHashMap 通常优于同步的 HashMap,ConcurrentSkipListMap 通常优于同步的 TreeMap。
  • 当期望的读数和遍历远远大于列表的更新数时,CopyOnWriteArrayList 优于同步的 ArrayList。 
  • 此包中与某些类一起使用的“Concurrent&rdquo前缀;是一种简写,表明与类似的“同步”类有所不同。
  • 例如,java.util.Hashtable 和 Collections.synchronizedMap(new HashMap()) 是同步的,但 ConcurrentHashMap 则是“并发的”。
  • 并发 collection 是线程安全的,但是不受单个排他锁的管理。
  • 在 ConcurrentHashMap 这一特定情况下,它可以安全地允许进行任意数目的并发读取,以及数目可调的并发写入。
  • 需要通过单个锁不允许对 collection 的所有访问时,“同步”类是很有用的,其代价是较差的可伸缩性。
  • 在期望多个线程访问公共 collection 的其他情况中,通常“并发”版本要更好一些。
  • 当 collection 是未共享的,或者仅保持其他锁时 collection 是可访问的情况下,非同步 collection 则要更好一些。 
  • 大多数并发 Collection 实现(包括大多数 Queue)与常规的 java.util 约定也不同,
  • 因为它们的迭代器提供了弱一致的,而不是快速失败的遍历。弱一致的迭代器是线程安全的,
  • 但是在迭代时没有必要冻结 collection,所以它不一定反映自迭代器创建以来的所有更新

 

分享到:
评论

相关推荐

    java并发工具包 java.util.concurrent中文版用户指南pdf

    1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...

    Java并发工具包java.util.concurrent用户指南中英文对照阅读版.pdf

    java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...

    java并发工具包 java.util.concurrent中文版pdf

    ### Java并发工具包 `java.util.concurrent` 知识点详解 #### 一、引言 随着多核处理器的普及和应用程序复杂度的增加,多线程编程成为了现代软件开发不可或缺的一部分。为了简化并发编程的复杂性,Java 5 引入了 `...

    java.util.concurrent 学习ppt

    通过Java.util.concurrent包,开发者可以更安全、高效地编写并发程序,避免了重复造轮子,同时也降低了并发编程的复杂性和错误率。这个包的设计理念是提供足够高的抽象层次,让开发者可以专注于应用逻辑,而不是底层...

    java.util.concurrent 实现线程池队列

    总的来说,`java.util.concurrent` 提供的线程池和工作队列机制,使得Java开发者能够高效、安全地管理并发任务,优化系统资源的利用,提高系统的整体性能。理解并熟练运用这些工具,是每个Java开发者必备的技能。

    The java.util.concurrent Synchronizer Framework

    为了更好地支持并发编程,Java平台在J2SE 1.5版本中引入了`java.util.concurrent`包,这是一个包含了许多中级并发支持类的集合,通过Java社区过程(Java Community Process, JCP)的Java规范请求(Java ...

    Java并发工具包java.util.concurrent用户指南中英文对照阅读版

    1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...

    The java. util. concurrent synchronizer framework.pdf

    AQS(AbstractQueuedSynchronizer)是Java.util.concurrent包中同步器的基础框架,它的核心设计思想与实现方法在Doug Lea先生的这篇论文中有详细的介绍。论文详细阐述了AQS框架的原理、设计、实现、应用以及性能等...

    java并发工具包 java.util.concurrent中文版-带书签版

    Java并发工具包(java.util.concurrent)是Java平台上用于高效、安全地处理多线程编程的重要组件。这个包包含了丰富的并发工具类,旨在帮助开发者构建高度并发的程序,提高程序的性能和可伸缩性。本资源是该工具包的...

    The java.util.concurrent synchronizer framework.pdf

    文档标题“java.util.concurrent同步器框架”和描述“Doug Lea的java.util.concurrent同步器框架”表明本文将探讨由Doug Lea所撰写的关于Java并发编程中同步器框架的内容。文档中提到了AbstractQueuedSynchronizer类...

    Java并发工具包java.util.concurrent用户指南中英文对照阅读版pdf

    Java并发工具包java.util.concurrent是Java平台在Java 5版本中引入的一组新的并发编程类库,旨在帮助Java开发者更容易地实现复杂的并发程序。这一包的出现,极大地简化了开发者在处理线程和数据同步时所遇到的难题,...

    java.util.concurrent介绍(重要).pdf

    总之,`java.util.concurrent` 提供的工具使得并发编程变得更加容易和高效,是 Java 并发编程的基石,无论是对于初学者还是经验丰富的开发者,理解和掌握这个包都是非常重要的。通过熟练运用这些工具,开发者可以...

    java并发工具包详解

    1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...

    28个java常用的工具类

    10. **`java.util.concurrent.*`**: 并发库,包括线程池、并发容器(如`ConcurrentHashMap`)、原子变量(如`AtomicInteger`)等。 11. **`java.io.File`**: 文件和目录操作,如创建、删除、读取文件信息。 12. **...

    30个常用java工具类

    8. **`java.util.concurrent`** 包:提供并发工具类,如`ExecutorService`、`Future`和`Semaphore`,帮助管理线程和控制并发。 9. **`java.util.Map.Entry`**:表示Map中的键值对,常用于遍历Map。 10. **`java....

    java_util_concurrent_user_guide

    4. **阻塞队列**: `BlockingQueue` 是并发容器的一种,支持线程安全的插入、删除和获取元素操作,常用于线程间的通信。例如:`ArrayBlockingQueue`、`LinkedBlockingQueue` 和 `PriorityBlockingQueue`。 5. **并发...

    Java常用工具类大全,工作5年精心整理.zip

    4. **`java.util.concurrent`包**:这个包包含了线程安全的数据结构(如ConcurrentHashMap)和并发工具类,如ExecutorService、Semaphore、CyclicBarrier等,用于高效地处理多线程场景。 5. **`java.util.logging....

    Java并发编程(21)并发新特性-阻塞队列和阻塞栈(含代

    例如,Java 5引入了`java.util.concurrent`包,提供了丰富的并发工具类,包括阻塞队列、线程池、原子类等,显著提升了并发编程的易用性和效率。Java 7和8又添加了一些新的特性,如Fork/Join框架、Lambda表达式等,...

Global site tag (gtag.js) - Google Analytics