`

BlockingQueue 源码分析

阅读更多

public interface BlockingQueue<E> extends Queue<E> {
    /**
     * 插入指定元素到队列中,如果没有超出容量限制的话, 插入成功,返回 true. 如果没有空间的话,抛出 IllegalStateException.
     * 当使用有容量限制的队列(queue)时,通常最好是使用 offer(Object) 方法.
     *
     */
    boolean add(E e);

    /**
     * 插入指定元素到队列中,如果没有超出容量限制的话, 插入成功,返回 true, 如果没有空间的话返回 false.
     * 当使用有容量限制的队列时,这个方法比 add 方法更好(当插入失败的时候,抛异常).
     *
     */
    boolean offer(E e);

    /**
     * 插入指定元素到队列中,必要时等待空间可用.
     *
     */
    void put(E e) throws InterruptedException;

    /**
     * 插入指定元素到队列中,必要时等待指定的时间等待元素可用.
     *
     */
    boolean offer(E e, long timeout, TimeUnit unit)
        throws InterruptedException;

    /**
     * 检索并删除队列的头部,必要时等待直到元素可用.
     *
     */
    E take() throws InterruptedException;

    /**
     * 检索并移除队列的头部,必要时等待指定的时间等待元素可用.
     *
     */
    E poll(long timeout, TimeUnit unit)
        throws InterruptedException;

    /**
     *
     * 返回这个队列在理想状态下可以非阻塞接收的元素的个数。如果没有明确指定队列容量,那么就返回Integer.MAX_VALUE.
     * 注意:无法总是判断尝试插入一个元素是否成功通过检查 remainingCapacity 方法. 因为可能存在这么一种情况,另外一个线程
     * 即将插入或者移除一个元素.
     *
     */
    int remainingCapacity();

    /**
     *
     * 从队列中删除指定元素的单个实例,如果它存在的话. 更正式的说,删除元素 e(o.equals(e)), 如果队列
     * 中包含一个或者多个这样的元素. 如果此队列包含指定的元素,则返回 true(或者等效的说,如果此队列因调用
     * 这个方法而发生了更改).
     *
     */
    boolean remove(Object o);

    /**
     * 如果此队列包含指定元素,则返回 true. 更正式的说,如果这个队列中包含至少一个 e(o.equals(e))
     * 这种情况下才返回 true.
     *
     */
    public boolean contains(Object o);

    /**
     *
     * 删除此队列中的所有可用元素并将它们添加到给定的集合中. 这个操作比反复 polling 这个队列更加有效.
     * 当相关的异常抛出时,可能会导致将元素添加到集合c的过程中该元素不在任何一个集合中。尝试将一个队列中的
     * 元素批量保存到队列本身会抛出IllegalArgumentException.
     * 当在执行 drainTo 的过程中如果指定的集合 c 被修改了,那么这种情况产生的结果是未知的.
     *
     */
    int drainTo(Collection<? super E> c);

    /**
     *
     * 将指定数量的元素从队列中删除,并保存到指定的集合中.
     * 当相关的异常抛出时,可能会导致将元素添加到集合 c 的过程中该元素不在任何一个集合中.
     * 尝试将一个队列中的元素批量保存到队列本身会抛出 IllegalArgumentException.
     * 当在执行 drainTo 的过程中如果指定的集合 c 被修改了,那么这种情况产生的结果是未知的.
     */
    int drainTo(Collection<? super E> c, int maxElements);
}
0
0
分享到:
评论

相关推荐

    【死磕Java集合】-集合源码分析.pdf

    Java集合框架源码分析 Java集合框架是Java语言中一个非常重要的组件,提供了多种数据结构和算法来存储和操作数据。在Java集合框架中,LinkedList、ArrayList、HashMap、TreeMap等都是非常常用的数据结构。本文将对...

    java线程池的源码分析.zip

    本文将深入探讨Java线程池的源码分析,并对比不同类型的线程池,以帮助开发者更好地理解和利用这一强大的工具。 首先,我们要理解Java线程池的核心类`java.util.concurrent.ThreadPoolExecutor`,它是所有自定义...

    ArrayBlockingQueue源码分析.docx

    下面我们将深入分析其主要的实现机制、方法以及源码。 1. **数据结构与容量** `ArrayBlockingQueue` 内部使用一个数组 `items` 来存储元素,因此它的容量在创建时就需要指定,且不可改变。这个容量限制确保了队列...

    并发容器——BlockingQueue相关类

    分析这个测试文件可以帮助我们更好地理解和应用`BlockingQueue`。实际操作中,我们可以通过监控和调优这些代码来优化并发性能,比如调整队列大小,选择适合的实现类,或者优化生产者和消费者的处理速度。

    线程池ThreadPoolExecutor原理源码分析.md

    ### 线程池 `ThreadPoolExecutor` 原理源码分析 #### 一、概述 线程池作为 Java 并发编程中的重要组件,在实际应用中被广泛使用。其核心类 `ThreadPoolExecutor` 实现了对线程的管理、调度等功能。本文将围绕 `...

    java并发编程源码分析-javaThread:java并发编程实战手册源码分析

    `javaThread`项目则是一个专门针对Java并发编程进行源码分析的实战手册,它旨在帮助开发者深入理解Java线程的内部机制和并发工具的实现原理。 在Java中,`Thread`类是所有线程的基础,它是Java并发模型的核心。`...

    jdk1.8 sun源码

    源码分析是一个复杂的过程,通过阅读源码,开发者可以学习到以下关键知识点: 1. **Java虚拟机(JVM)的工作机制**:Sun JDK中的源码揭示了JVM如何加载类、执行字节码、垃圾收集等关键过程。例如,`java.lang....

    java8集合源码分析-AboutJava:java相关知识(理论,代码)相关知识均是看书,博客等地方获取再由自己整理,如存在侵权,请告诉我

    集合源码分析 AboutJava ==java 相关知识(理论,代码)相关知识均是看书,博客等地方获取再由自己整理,如存在侵权,请告诉我== Java基础 (缺少代码) IO 缺少图片 BIO NIO JAVA8 异常 --- 容器 基本容器 集合 Map ...

    java二叉树算法源码-JavaCore:Java核心知识。集合框架、JVM机制、多线程与并发框架、网络协议、SSM框架、MySQL、分布式、

    源码分析:BlockingQueue 接口 集合框架 (第 17 篇) 源码分析:CopyOnWriteArrayList 与 CopyOnWriteArraySet 二、:radio::radio::radio:JVM(Java虚拟机) Java虚拟机 (第 06 篇) 深入理解:类文件结构 Java...

    java队列源码

    4. **源码分析** - 通常,实现线程安全队列的源码会包含如下关键部分: - **插入操作**:确保在队尾添加元素时不会与其他线程的读写操作冲突。 - **移除操作**:在队头移除元素时,确保元素只被一个线程处理一次...

    java并发编程源码

    《Java并发编程源码》是深入理解Java多线程编程技术的重要参考资料,它包含了实际案例和源代码,有助于...源码学习是提高编程技能的有效途径,特别是对于复杂的并发场景,源码分析能帮助我们更好地理解和解决问题。

    葛一鸣 实战java高并发程序设计 源码

    源码分析: 1. **线程与多线程**:Java中的线程是并发编程的基础,通过`Thread`类或实现`Runnable`接口可以创建线程。源码中可能包含各种线程的创建和管理方式,如`start()`方法启动线程,`join()`等待线程结束,...

    基于Spring Boot和LMAX Disruptor的高性能并发框架.zip

    项目涵盖了并发编程的核心概念、无锁并行计算框架的使用、高级特性、底层源码分析以及与Netty的整合实战。通过本项目,开发者可以深入理解并发编程的原理,掌握Disruptor框架的使用,并能够构建高性能的并发应用。 ...

    backport-util-concurrent_java_backport_源码.zip

    《backport-util-concurrent_java_backport_源码分析》 backport-util-concurrent是一个Java库,它的主要目的是将Java 5中的并发工具类(java.util.concurrent)回移植到Java 1.3和1.4等早期版本。这个库使得开发者...

    Java数据结构源码

    3. **Java源码分析**: - 源码阅读可以帮助我们了解内部实现细节,提升编程技巧。例如,可以研究ArrayList和LinkedList的增删改查操作的效率差异,或者研究TreeMap如何保证排序。 - 通过源码学习数据结构的抽象和...

    Java高并发核心编程(卷2)源码

    源码分析可以帮助理解它们如何保证线程安全和并发性能。 5. **原子类**:`Atomic`系列类(如`AtomicInteger`、`AtomicLong`、`AtomicReference`等)提供了无锁编程的支持。源码中可能会展示如何使用原子类实现高效...

    Java多线程设计模式(带源码)

    在这个主题中,我们将深入探讨几个关键的多线程设计模式,以及如何通过源码分析来理解它们的实现。 1. **生产者消费者模式**:这种模式用于在两个线程之间共享资源,一个线程负责生成数据(生产者),另一个线程...

    JAVA数据库连接池完整源码(简单易用带详细注释)

    5. **源码分析**:本压缩包中的`DatabasePool`可能是自定义的连接池实现。通过阅读源码,我们可以理解连接池的核心机制,包括连接的创建、维护、检测和回收等。 6. **性能优化**:优秀的连接池实现会考虑连接的生命...

    生产者消费者问题---源码.rar

    生产者消费者问题是多线程编程中的一个经典案例,主要展示了线程间的同步和通信。...通过分析源码,我们可以深入理解如何利用`BlockingQueue`等工具解决这类问题,并学习到如何在多线程环境中确保程序的正确性和性能。

Global site tag (gtag.js) - Google Analytics