从J2SE 5.0开始有了java.util.concurrent套件,其中的类可以使实现多线程相关功能更为方便。本节将简介concurrent套件中的几个简单常用的类。
15.3.1 BlockingQueue
队列(Queue)是一个先进先出(First In First Out, FIFO)的数据结构。在J2SE 5.0中增加了java.util.concurrent.BlockingQueue。在多线程情况下,如果BlockingQueue的内容为空,而有个线程试图从Queue中取出元素,则该线程会被Block,直到Queue有元素时才解除Block;反过来,如果 BlockingQueue满了,而有个线程试图再把数据填入Queue中,则该线程会被Block,直到Queue中有元素被取走后解除Block。
BlockingQueue的几个主要操作如表15-1所示。
表15-1 BlockingQueue的几个操作
java.util.concurrent中提供几种不同的BlockingQueue。ArrayBlockingQueue要指定容量大小来构建。LinkedBlockingQueue默认没有容量上限,但也可以指定容量上限。PriorityBlockingQueue严格来说不是Queue,因为它是根据优先权(Priority)来移除元素。
我们以在wait()、notify()介绍时的生产者、消费者程序为例,使用BlockQueue来加以改写,优点是不用亲自处理wait()、notify()的细节。首先生产者改写如范例15.21所示:
范例15.21 ProducerQueue.java
package onlyfun.caterpillar;
import java.util.concurrent.BlockingQueue;
public class ProducerQueue implements Runnable {
private BlockingQueue<Integer> queue;
public ProducerQueue(BlockingQueue<Integer> queue) {
this.queue = queue;
}
public void run() {
for(int product = 1; product <= 10; product++) {
try {
// wait for a random time
Thread.sleep((int) Math.random() * 3000);
queue.put(product);
}
catch(InterruptedException e) {
e.printStackTrace();
}
}
}
}
|
可以看到,直接使用BlockingQueue,会自动处理同步化、wait()和notify()的执行。消费者类改写如范例15.22所示:
范例15.22 ConsumerQueue.java
package onlyfun.caterpillar;
import java.util.concurrent.BlockingQueue;
public class ConsumerQueue implements Runnable {
private BlockingQueue<Integer> queue;
public ConsumerQueue(BlockingQueue<Integer> queue) {
this.queue = queue;
}
public void run() {
for(int i = 1; i <= 10; i++) {
try {
// wait for a random time
Thread.sleep((int) (Math.random() * 3000));
queue.take();
}
catch(InterruptedException e) {
e.printStackTrace();
}
}
}
}
|
可以使用范例15.23进行简单的测试:
范例15.23 BlockingQueueDemo.java
package onlyfun.caterpillar;
import java.util.concurrent.BlockingQueue;
public class ConsumerQueue implements Runnable {
private BlockingQueue<Integer> queue;
public ConsumerQueue(BlockingQueue<Integer> queue) {
this.queue = queue;
}
public void run() {
for(int i = 1; i <= 10; i++) {
try {
// 等待一个随机时间
Thread.sleep((int) (Math.random() * 3000));
queue.take();
}
catch(InterruptedException e) {
e.printStackTrace();
}
}
}
}
|
由于BlockingQueue不需要您来控制,所以没有特意显示信息以表示生产者、消费者放入产品至Queue的信息,不过仍可以在ProducerQueue与ConsumerQueue中放入相关信息显示,以确认程序确实在运转。
分享到:
相关推荐
换机套件2在保留了换机套件核心功能的基础上,新增了“装机手顺”和“Tomcat压缩包”两个关键组件,使整个套件更趋完善。对于开发者而言,这两部分无疑是在新环境中快速恢复工作状态的重要保障。 首先,关于“装机...
诺基亚PC套件清除器是一款专为了解决诺基亚手机用户在使用诺基亚PC套件过程中可能遇到的问题而设计的官方工具。这款软件的主要功能是清理和修复与诺基亚PC套件相关的系统组件,确保手机与电脑之间的连接稳定,数据...
在这个"ZigBee开发套件内容.zip"压缩包中,包含了一系列与ZigBee开发相关的资源,特别是针对CC2530微控制器的。 CC2530是Texas Instruments(TI)公司推出的一款集成ZigBee射频(RF)和微控制器(MCU)的芯片,它是...
根据提供的文件信息,我们可以深入探讨“诺基亚PC套件”的相关知识点。 ### 一、诺基亚PC套件概述 诺基亚PC套件是一款由诺基亚公司开发的官方软件工具,旨在帮助用户更好地管理和同步他们的诺基亚手机与个人电脑...
《戴尔硬盘保护增强套件V4.0181106:全面解析与应用指南》 在数字化时代,数据安全已经成为每个用户关注的重点,尤其是对于企业用户来说,硬盘中的重要信息更是需要得到妥善的保护。戴尔作为全球知名的计算机制造商...
Node.js v4,Node.js v6,Odoo 8,OpenERP 6.1,OpenERP 7.0,Piwik,Podcast Generator,PrestaShop,PrestaShop1.7,Ruby,Spree,SugarCRM,Tomcat6,Webalizer,osCommerce,phpBB 等已经下架群辉套件下载地址。
Cpolar群晖套件使用指南 Cpolar群晖套件是一款功能强大且易于使用的套件,旨在帮助用户快速搭建隧道,并提供了丰富的功能和配置选项。以下是 Cpolar 群晖套件使用指南的详细介绍。 安装 Cpolar 群晖套件 要安装 ...
为了进一步提升用户在个人电脑上管理这些手机数据的便利性,步步高公司推出了专为i系列手机设计的PC套件。本文将深入探讨这款PC套件的功能和使用优势,为步步高i系列手机的用户带来更高效的手机管理体验。 首先,...
诺基亚 PC 套件诺基亚 PC 套件诺基亚 PC 套件诺基亚 PC 套件诺基亚 PC 套件诺基亚 PC 套件
诺基亚5300PC套件是一款专为诺基亚5300手机设计的管理软件,旨在帮助用户更方便地与个人计算机进行数据同步和管理。通过这款套件,用户可以实现以下功能: 1. 数据同步:诺基亚PC套件允许用户将手机中的联系人、...
这篇内容将深入探讨DSM6.X套件的核心特性、功能以及使用场景。 首先,DSM6.X的界面设计简洁直观,采用触摸友好的图标和布局,使得用户即使没有深厚的技术背景也能轻松上手。系统提供了多语言支持,确保全球用户都能...
这个里面包含了群晖第三方套件源,都是我手机整理来的,最近测试过后,将不能用的一下都删了,现在留下了17个套件源,可以让你的群晖服务器干更多的事情。
威联通jellyfin10.9.9 套件版,支持硬解
鲲鹏开发套件插件工具(VSCode) 鲲鹏开发套件插件工具(VSCode)是华为技术有限公司开发的一款插件工具,旨在帮助开发者更方便地使用鲲鹏开发套件进行开发。在此工具中,开发者可以安装和配置各种插件,以满足不同...
《全面解析:实业电子45款传感器套件》 在当今科技日新月异的时代,传感器作为物联网和智能系统中的重要组成部分,其作用不言而喻。实业电子推出的45款传感器套件,集合了各类常见及创新的传感器,旨在为电子爱好者...
PC套件通常包含了一系列用于开发、调试、固件更新和故障排除的工具,对于MT6225-MT6227芯片的手机来说,这个套件至关重要。以下是对PC套件中可能包含的内容和相关知识点的详细解释: 1. **驱动程序**:PC套件会提供...
本文主要介绍了如何确定西门子SIMATIC PCS7自动化系统(AS)套件的订货号,以及PCS7 AS套件中包含的具体组件。此文档版本为2012年6月版,适用的版本是PCS7的8.0版。 首先,文档标题中的PCS7是西门子的一款集成自动化...
php服务器安装套件,支持windows环境下php系统快速安装运行。套件包含了mysql,phpmyadmin以及主流的php版本,从php5.2.17至php7.0多个版本可自由选择切换版本。布置php运行环境从此变得轻松自由。
书生sep电子文档阅读器套件是一款专为用户设计的高效、全面的电子文档查看工具。这款套件由书生公司开发,旨在提供一个统一的平台来处理多种类型的电子文档,包括他们自家的SEP格式以及其他的流行格式如GW、GD、IFR...
电话套件PC套件是一种专为手机与个人电脑(PC)间进行数据同步设计的软件工具。这种套件通常包含了多种功能,旨在帮助用户在不同的设备之间无缝地传输信息,如联系人、日历事件、短信、照片、音乐等。在标题提到的...