Java多线程(五)之BlockingQueue深入分析
Java多线程之BlockingQueue深入分析 Java多线程中,BlockingQueue是一种特殊的队列,它可以为线程同步提供有力的保障。在Java多线程(五)之BlockingQueue深入分析中,我们将深入分析BlockingQueue的定义、常用方法、注意点、实现类等。 一、概述 BlockingQueue作为线程容器,可以为线程同步提供有力的保障。它可以存储元素,并且可以对元素进行阻塞、超时、插入、移除等操作。 二、BlockingQueue定义的常用方法 BlockingQueue定义了许多常用的方法,如下所示: 1. add(e):将元素e添加到BlockingQueue中,如果BlockingQueue可以容纳,则返回true,否则抛出异常。 2. offer(e):表示如果可能的话,将元素e添加到BlockingQueue中,如果BlockingQueue可以容纳,则返回true,否则返回false。 3. put(e):将元素e添加到BlockingQueue中,如果BlockingQueue没有空间,则调用此方法的线程被阻断直到BlockingQueue里面有空间再继续。 4. poll(time):取走BlockingQueue里排在首位的对象,若不能立即取出,则可以等time参数规定的时间,取不到时返回null。 5. take():取走BlockingQueue里排在首位的对象,若BlockingQueue为空,阻断进入等待状态直到BlockingQueue里面有新的对象被加入为止。 三、BlockingQueue的几个注意点 1. BlockingQueue可以是限定容量的,它在任意给定时间都可以有一个remainingCapacity,超出此容量,无法无阻塞地put附加元素。 2. BlockingQueue实现主要用于生产者-使用者队列,但它另外还支持Collection接口。因此,例如使用remove(x)从队列中移除任意一个元素是有可能的。 3. BlockingQueue实现是线程安全的。所有排队方法都可以使用内部锁或其他形式的并发控制来自动达到它们的目的。 4. BlockingQueue实质上不支持使用任何一种"close"或"shutdown"操作来指示不再添加任何项。 四、BlockingQueue的四个实现类 1. ArrayBlockingQueue:规定大小的BlockingQueue,其构造函数带一个int参数来指明其大小。其所含的对象是以FIFO(先入先出)顺序排序的。 2. LinkedBlockingQueue:大小不定的BlockingQueue,若其构造函数带一个规定大小的参数,生成的BlockingQueue有大小限制,若不带大小参数,所生成的BlockingQueue的大小由Integer.MAX_VALUE来决定。其所含的对象是以FIFO(先入先出)顺序排序的。 3. PriorityBlockingQueue:类似于LinkedBlockQueue,但其所含对象的排序不是FIFO,而是依据对象的自然排序顺序或者是构造函数的Comparator决定的顺序。 4. SynchronousQueue:特殊的BlockingQueue,对其的操作是放和取交替完成的。 五、具体Block 在实际开发中,BlockingQueue可以用来实现生产者-消费者模式,或者用来实现线程池的任务队列等。BlockingQueue可以为线程同步提供有力的保障,並且可以提高程序的性能和可靠性。
剩余7页未读,继续阅读
- 粉丝: 5
- 资源: 923
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 山东联通-海信IP501H-GK6323V100C-1+8G-4.4.2-当贝桌面-卡刷包
- IMG_6338.PNG
- 典范相关分析-CCorA:R语言实现代码+示例数据
- IMG_6337.PNG
- 首发花粥商城兼容彩虹商城简介模板
- C#/WinForm演示退火算法(源码)
- 如何在 IntelliJ IDEA 中去掉 Java 方法注释后的空行.md
- C语言版base64编解码算法实现
- iflytek TextBrewer Ner任务的增强版,TextBrewer是一个基于pytorch的、为实现NLP中的知识蒸馏任务而设计的工具包
- iflytek TextBrewer Ner任务的增强版,TextBrewer是一个基于pytorch的、为实现NLP中的知识蒸馏任务而设计的工具包