1.先简单介绍下java.util.concurrent中的几种常见阻塞队列
(1):BlockingQueue
BlockingQueue有四个具体的实现类,根据不同需求,选择不同的实现类:
ArrayBlockingQueue:规定大小的BlockingQueue,其构造函数必须带一个int参数来指明其大小。其所含的对象是以FIFO(先入先出)顺序排序的。
LinkedBlockingQueue:大小不定的BlockingQueue,若其构造函数带一个规定大小的参数,生成的BlockingQueue 有大小限制,若不带大小参数,所生成的BlockingQueue的大小由Integer.MAX_VALUE来决定。其所含的对象是以FIFO顺序排序的。
PriorityBlockingQueue:类似于LinkedBlockingQueue,但其所含对象的排序不是FIFO,而是依据对象的自然排序顺序或者是构造函数所带的Comparator决定的顺序。
SynchronousQueue:特殊的BlockingQueue,对其的操作必须是放和取交替完成的。
其中的LinkedBlockingQueue和SynchronousQueue又是比较常用的。
下面以2个例子简单介绍,部分源码如下:
public class BlockingQueueTest {
public static void main(String[] args) {
final BlockingQueue<Integer> queues = new LinkedBlockingDeque<Integer>(3);
final Random random = new Random();
/**
* 生产者
* @author Administrator
*
*/
class Producer implements Runnable {
public void run() {
while (true) {
int i = random.nextInt(100);
// 当队列容量达到时,会自动阻塞
try {
queues.put(i);
if (queues.size() == 3) {
System.out.println("full");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
/**
* 消费者
* @author Administrator
*
*/
class Consumer implements Runnable {
public void run() {
while (true) {
try {
// 当队列为空时,也会阻塞
queues.take();
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
new Thread(new Producer()).start();
new Thread(new Consumer()).start();
}
}
public class SynchronousQueueTest {
class producer implements Runnable {
private BlockingQueue<String> queues;
List<String> objects = Arrays.asList("one","two","three");
public producer(BlockingQueue<String> q) {
this.queues = q;
}
public void run() {
try {
for (String s : objects) {
queues.put(s);
System.out.println("put:"+s);
}
queues.put("done");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class consumer implements Runnable {
private BlockingQueue<String> queues;
public consumer(BlockingQueue<String> q) {
this.queues = q;
}
public void run() {
String obj;
try {
while (!((obj = queues.take()).equals("done"))) {
System.out.println("take:"+obj);
Thread.sleep(3000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
BlockingQueue<String> bq = new SynchronousQueue<String>();
SynchronousQueueTest sqt = new SynchronousQueueTest();
new Thread(sqt.new producer(bq)).start();
new Thread(sqt.new consumer(bq)).start();
}
}
分享到:
相关推荐
【Java并发编程--BlockingQueue详解】 BlockingQueue 是 Java 并发包(java.util.concurrent)中的一个接口,它扩展了 Queue 接口,并引入了线程安全的特性,特别适合于多线程环境下的数据共享。 BlockingQueue 的...
Java 并发集合:ConcurrentHashMap 和 ...Java 并发集合(ConcurrentHashMap 和 BlockingQueue)提供了高效的并发操作和线程安全机制,广泛应用于多种场景,例如多线程编程、数据存储和访问、生产者-消费者模式等。
Java中的`BlockingQueue`接口是Java并发编程的重要组件,它位于`java.util.concurrent`包下,主要用于线程间数据的同步和通信。`BlockingQueue`是一个支持线程安全的队列,它允许一个线程放入(插入)元素,而另一个...
在Java编程领域,并发编程是不可或缺的一部分,尤其是在大型系统或高并发应用中。"java并发编程-构建块"这个主题涵盖了使程序能够同时处理多个任务的关键概念和技术。在这个主题下,我们将深入探讨Java中用于构建...
本文将深入探讨"Java并发编程-线程安全与基础构建模块"这一主题,旨在帮助开发者理解如何有效地处理并发问题,提高程序性能和稳定性。 首先,线程安全是并发编程中的核心概念,指的是多个线程访问同一资源时,无论...
Java并发包(`java.util.concurrent`)提供了许多工具类,如`ExecutorService`、`Semaphore`、`CountDownLatch`、`CyclicBarrier`、`Future`等,它们用于线程管理、同步控制、任务执行和结果获取,为并发编程提供了...
Java并发编程是Java开发中的重要领域,特别是在多核处理器和分布式系统中,高效地利用并发可以极大地提升程序的性能和响应速度。以下是对标题和描述中所提及的几个知识点的详细解释: 1. **线程与并发** - **线程*...
并发编程是现代软件开发中的核心技能之一,尤其是在多核处理器普及后,利用多线程进行并发处理已经成为提升程序性能的关键技术。这本书深入浅出地讲解了Java平台上的并发编程原理、工具和最佳实践。 在Java中,线程...
《Java_并发核心编程-中英文版》是一个深入探讨Java并发编程的重要资源,适用于那些希望在JDK 1.5及以后版本的Java环境中提升并发处理能力的开发者。并发编程是现代多核处理器环境下提高软件性能和效率的关键技术,...
《JAVA并发编程实践》这本书是Java开发者深入理解并发编程的重要参考资料。它涵盖了Java并发的核心概念、工具和最佳实践,旨在帮助读者在多线程环境下编写高效、安全的代码。 并发编程是现代软件开发中的关键技能,...
### Java并发编程实践-电子书-03章知识点解析 #### 3.1 java.util.concurrent概述 `java.util.concurrent`包是在JDK5.0之后引入的,它为多线程编程提供了强大的支持,旨在更好地利用现代多处理器或多核系统的性能...
《JAVA并发编程艺术》是Java开发者深入理解和掌握并发编程的一本重要著作,它涵盖了Java并发领域的核心概念和技术。这本书详细阐述了如何在多线程环境下有效地编写高效、可靠的代码,对于提升Java程序员的技能水平...
本资源“Concurrent-Programming-with-Java-and-OpenMP”提供了Java和OpenMP两种并发编程技术的源码实例,帮助开发者深入理解并发编程的实践与原理。 在Java中,Java并发API(Java Concurrency API)是实现并发编程...
并发编程是现代软件开发中的核心技能之一,尤其是在多核处理器和分布式系统普及的今天。Java平台提供了丰富的并发工具和API,如线程、同步机制、并发容器、并发工具类等,这些在《Java 并发编程实战》中都有详尽的...
根据提供的信息,我们可以推断出该资源主要关注的是“Java并发编程实践”的相关内容,并且它是一本高清晰度的PDF电子书。虽然提供的链接部分似乎只是重复的网站地址,我们仍可以根据标题、描述以及标签来生成相关的...
Java并发编程是软件开发中的一个关键领域,尤其是在大型企业级应用和分布式系统中。通过学习相关的书籍,开发者可以深入理解如何有效地设计和实现高效的多线程应用程序,避免并发问题,如竞态条件、死锁、活锁等。...
在Java编程领域,并发编程是一项核心技能,尤其是在大型系统或分布式应用中,高效地处理多线程和并发操作是至关重要的。"Java并发编程与实践"文档深入剖析了这一主题,旨在帮助开发者理解和掌握如何在Java环境中有效...
根据提供的文件信息,“JAVA并发编程实践 中文 高清 带书签 完整版 Doug Lea .pdf”,我们可以推断出这份文档主要聚焦于Java并发编程的技术实践与理论探讨。下面将从多个角度来解析这个文档可能涵盖的关键知识点。 ...
在Java编程领域,并发编程是一项核心技能,尤其是在大型分布式系统和多核处理器环境中。本练习集专注于提升你在Java并发编程中的技巧,通过一系列逐步进阶的代码实例,帮助你掌握从基础到高级的并发概念。 首先,...