`

concurren套件(转载)

    博客分类:
  • java
阅读更多

从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中放入相关信息显示,以确认程序确实在运转。

分享到:
评论

相关推荐

    诺基亚PC套件清除器-官方版

    诺基亚PC套件清除器是一款专为了解决诺基亚手机用户在使用诺基亚PC套件过程中可能遇到的问题而设计的官方工具。这款软件的主要功能是清理和修复与诺基亚PC套件相关的系统组件,确保手机与电脑之间的连接稳定,数据...

    换机套件2是换机套件的补充版

    换机套件2,正如其名,是针对“换机套件”的一个增强版本,旨在为用户提供更加完善的系统迁移和开发环境配置支持。这个套件的核心目标是帮助用户在不同设备间平滑过渡,保持开发环境的一致性,从而提高工作效率。 ...

    ZigBee开发套件内容

    在这个"ZigBee开发套件内容.zip"压缩包中,包含了一系列与ZigBee开发相关的资源,特别是针对CC2530微控制器的。 CC2530是Texas Instruments(TI)公司推出的一款集成ZigBee射频(RF)和微控制器(MCU)的芯片,它是...

    诺基亚PC套件,诺基亚,PC,套件

    根据提供的文件信息,我们可以深入探讨“诺基亚PC套件”的相关知识点。 ### 一、诺基亚PC套件概述 诺基亚PC套件是一款由诺基亚公司开发的官方软件工具,旨在帮助用户更好地管理和同步他们的诺基亚手机与个人电脑...

    群辉下架套件下载,Cloud Station Server,Discourse,Drupal等套件下载地址

    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 等已经下架群辉套件下载地址。

    戴尔硬盘保护增强套件V4.0181106.zip

    《戴尔硬盘保护增强套件V4.0181106:全面解析与应用指南》 在数字化时代,数据安全已经成为每个用户关注的重点,尤其是对于企业用户来说,硬盘中的重要信息更是需要得到妥善的保护。戴尔作为全球知名的计算机制造商...

    Cpolar群晖套件使用指南

    Cpolar群晖套件使用指南 Cpolar群晖套件是一款功能强大且易于使用的套件,旨在帮助用户快速搭建隧道,并提供了丰富的功能和配置选项。以下是 Cpolar 群晖套件使用指南的详细介绍。 安装 Cpolar 群晖套件 要安装 ...

    步步高i系列PC套件

    步步高i系列PC套件是一款专为步步高i系列手机设计的个人计算机应用程序,旨在帮助用户更方便地管理和同步手机上的数据。这个套件包含了多种实用功能,如信息同步、短信收发等,使得在电脑上操作手机变得更加简单高效...

    诺基亚 PC 套件xin

    诺基亚 PC 套件诺基亚 PC 套件诺基亚 PC 套件诺基亚 PC 套件诺基亚 PC 套件诺基亚 PC 套件

    诺基亚5300PC套件

    诺基亚5300PC套件是一款专为诺基亚5300手机设计的管理软件,旨在帮助用户更方便地与个人计算机进行数据同步和管理。通过这款套件,用户可以实现以下功能: 1. 数据同步:诺基亚PC套件允许用户将手机中的联系人、...

    群晖第三方套件源

    这个里面包含了群晖第三方套件源,都是我手机整理来的,最近测试过后,将不能用的一下都删了,现在留下了17个套件源,可以让你的群晖服务器干更多的事情。

    DSM6.X套件.zip

    这篇内容将深入探讨DSM6.X套件的核心特性、功能以及使用场景。 首先,DSM6.X的界面设计简洁直观,采用触摸友好的图标和布局,使得用户即使没有深厚的技术背景也能轻松上手。系统提供了多语言支持,确保全球用户都能...

    实业电子 45款传感器套件.rar

    《全面解析:实业电子45款传感器套件》 在当今科技日新月异的时代,传感器作为物联网和智能系统中的重要组成部分,其作用不言而喻。实业电子推出的45款传感器套件,集合了各类常见及创新的传感器,旨在为电子爱好者...

    书生sep电子文档阅读器套件

    书生sep电子文档阅读器套件是一款专为用户设计的高效、全面的电子文档查看工具。这款套件由书生公司开发,旨在提供一个统一的平台来处理多种类型的电子文档,包括他们自家的SEP格式以及其他的流行格式如GW、GD、IFR...

    Mtk6225PC套件

    PC套件通常包含了一系列用于开发、调试、固件更新和故障排除的工具,对于MT6225-MT6227芯片的手机来说,这个套件至关重要。以下是对PC套件中可能包含的内容和相关知识点的详细解释: 1. **驱动程序**:PC套件会提供...

    F0541_如何确定PCS 7 AS套件订货号及PCS 7 AS套件中包含哪些组件(2012年6月版).pdf

    本文主要介绍了如何确定西门子SIMATIC PCS7自动化系统(AS)套件的订货号,以及PCS7 AS套件中包含的具体组件。此文档版本为2012年6月版,适用的版本是PCS7的8.0版。 首先,文档标题中的PCS7是西门子的一款集成自动化...

    php服务器安装套件

    php服务器安装套件,支持windows环境下php系统快速安装运行。套件包含了mysql,phpmyadmin以及主流的php版本,从php5.2.17至php7.0多个版本可自由选择切换版本。布置php运行环境从此变得轻松自由。

    电话套件pc套件

    电话套件PC套件是一种专为手机与个人电脑(PC)间进行数据同步设计的软件工具。这种套件通常包含了多种功能,旨在帮助用户在不同的设备之间无缝地传输信息,如联系人、日历事件、短信、照片、音乐等。在标题提到的...

    TSL加密套件

    TSL加密套件 TSL加密套件是 Transport Layer Security(传输层安全)协议中的一组加密算法套件,用于保护数据的机密性和完整性。下面是对TSL加密套件的详细分析和介绍: 1. TLS_NULL_WITH_NULL_NULL:该套件不提供...

    如何确定PCS 7 AS套件订货号及PCS 7 AS套件中包含哪些组件(2012年6月)

    ### 如何确定PCS 7 AS套件订货号及PCS 7 AS套件中包含哪些组件 #### PCS 7 AS套件概述 PCS 7 AS(自动化系统)套件是西门子为工业自动化领域提供的高级解决方案之一,适用于各种规模的工厂自动化需求,特别是对于...

Global site tag (gtag.js) - Google Analytics