常用的阻塞队列如下,它们都在`java.util.concurrent`包中,都实现了BlockingQueue接口,或BlockingDeque接口:
* java.util.concurrent.ArrayBlockingQueue< E> 5.0
* ArrayBlockingQueue(int capacity)
* ArrayBlockingQueue(int capacity, boolean fair)
构造一个带有指定容量和公平性设置的阻塞队列。该队列使用循环数组实现。公平性是指:优先处理等待最长时间的线程,使用公平性会降低队列性能,只有在确实需要的时候才会去使用它。
* java.util.concurrent.LinkedBlockingQueue< E> 5.0
* java.util.concurrent.LinkedBlockingDeque< E> 6
* LinkedBlockingQueue()
* LinkedBlockingDeque()
构造一个无上限的阻塞队列或双向队列。都用链表实现。
* LinkedBlockingQueue(int capacity)
* LinkedBlockingDeque(int capacity)
根据指定容量构建一个有限的阻塞队列,或双向队列。都用链表实现。
* java.util.concurrent.DelayQueue< E extends Delayed> 5.0
* DelayQueue()
构造一个包含Delayed元素的无界的阻塞时间有限的阻塞队列。只有那些延迟已经超过时间的元素可以从队列中移除。
* java.util.concurrent.Delayed 5.0
* long getDelay(TimeUnit unit)
得到该对象的延迟,用给定的时间单位进行度量。
* java.util.concurrent.PriorityBlockingQueue< E> 5.0
* PriorityBlockingQueue()
* PriorityBlockingQueue(int initialCapacity)
* PriorityBlockingQueue(int initialCapacity, Comparator<? super E> comparator)
构造一个无边界阻塞优先队列,用堆实现。
initialCapacity:默认值为11;
comparator:元素比较器,如果没有指定,则元素需要实现Comparable接口。
* java.util.concurrent.BlockingQueue< E> 5.0
* void put(E element)
添加元素,如果队列满,则阻塞。
* E take()
移除并返回头元素,队列为空,则阻塞。
* boolean offer(E element, long time, TimeUnit unit)
添加给定元素,成功返回true;如果队列满,或超时,返回false。
* E poll(long time, TimeUnit unit)
移除并返回头元素。队列为空,或超时则返回null。
* java.util.concurrent.BlockingDeque< E> 6
* void putFirst(E element)
* void putLast(E element)
向队头,队尾添加元素,队列满则阻塞。
* E takeFirst()
* E takeLast()
移除并返回头元素,或尾元素,队列空则阻塞。
* boolean offerFirst(E element, long time, TimeUnit unit)
* boolean offerLast(E element, long time, TimeUnit unit)
添加给定元素,成功返回true;队满,或超时则返回false。
* E pollFirst(long time, TimeUnit unit)
* E pollLast(long time, TimeUnit unit)
移除并返回头元素,或尾元素;队为空、或超时则返回null。
* java.util.concurrent.Transfer Queue< E> 7
* void transfer(E element)
* boolean tryTransfer(E element, long time, TimeUnit unit)
传输一个值,或者尝试在给定的超时时间内传输这个值,这个调用将阻塞,直到另一个线程将元素删除。第二个方法会调用成功时返回true。
操作队列还有如下方法:
(1)`add` 添加一个元素 。队满,抛出IllegalStateException异常。(不常用,常用`put`方法代替)
(2)`element` 返回队头元素。队空,抛出NoSuchElementException异常。(不常用,常用`peek`方法替代)
(3)`peek` 返回队头元素。队空,返回null。
(4)`remove` 移除并返回队头元素。队空,抛出NoSuchElementException异常。(不常用,常用`poll`方法代替)
- 网络通信
- 网络协议
- 端口和套接字
- TCP网络程序
- UDP网络程序
- 多线程聊天室
- 多线程
- 线程相关概念
- 线程实现方式
- 中断线程
- 线程生命周期
- 线程优先级
- 优先级规则
- 案例演示
- 线程同步机制
- 线程同步机制
- synchronized关键字
- ReentrantLock类
- Condition类
- 监视器概念
- volatile关键字
- final变量
- 死锁
- 线程局部变量
- 读/写锁
- 原子类
- 阻塞队列
- 工作规则
- 案例演示
- 常用阻塞队列
- 线程安全集合
- 高效的映射/集/队列
- 并发集视图
- 写数组的拷贝
- Arrays类的并行数组算法
- 同步包装器
- Callable与Future
- 执行器
- 线程池
- 预定执行
- 控制任务组
- Fork-Join框架
- 同步器
- 同步器
- 信号量
- CountDownLatch类
- CyclicBarrier类
- Exchanger类
- SynchronousQueue类
- 线程与Swing
- Swing与线程问题
- 两个原则
- Swing工作线程
- 单一线程规则
- 文件IO
- File类
- 文件输入输出
- ZIP压缩文件
- 集合
- 集合框架
- 集合接口
- 集合实现类
- 线程安全集合
- 集合算法
- 迭代器
- 集合排序
- JDBC
- JDBC是什么
- JDBC-ODBC桥
- JDBC驱动程序类型
- JDBC常用类与接口
- 数据库操作
- 连接数据库
- 增/删/改/查/预处理
- 事务
- 批处理
- commons-dbutils工具
- 安全问题
- Jedis
- 使用Jedis操作Redis数据库
- JSON转换
- 使用连接池
- 案例
- 单例破坏
- 单例定义
- 单例实现方式
- 懒汉式实现单例
- 饿汉式实现单例
- 单例破坏
- 类的单例破坏
- 枚举的单例破坏
- 克隆
- 克隆是什么
- 浅克隆
- 深克隆
- 注解
- 注解是什么
- 三大注解
- 内置注解
- 元注解
- 自定义注解
- NIO
- 相关概念
- BIO/NIO/AIO
- 多线程编程
- 线程同步
- 线程通信
- NIO
- NIO三大核心组件
- NIO网络编程
- NIO文件读写
- AIO
- Java8新特性
- Lambda表达式
- 方法引用
- 函数式接口
- 默认方法
- 什么是默认方法
- 默认方法语法格式
- 多个同名的默认方法问题
- 静态默认方法
- 默认方法实例
- Stream
- Stream是什么
- Stream示例
- Optional容器
- 新的日期时间API
- Base64
- SPI
- SPI是什么
- SPI与API的区别
- 常见场景
- 使用SPI需遵循的约定
- SPI使用步骤