package blockqueuetestinfo;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* @author 向旗
*/
public class QueueMain {
/**
* 定义装苹果的篮子
*/
public static class Basket {
// 篮子,能够容纳3个苹果
BlockingQueue<String> basket = new ArrayBlockingQueue<String>(3);
// 生产苹果,放入篮子
public void produce() throws InterruptedException {
// put方法放入一个苹果,若basket满了,等到basket有位置
basket.put("An apple");
}
// 消费苹果,从篮子中取走
public String consume() throws InterruptedException {
// get方法取出一个苹果,若basket为空,等到basket有苹果为止
return basket.take();
}
}
// 测试方法
public static void testBasket() {
// 建立一个装苹果的篮子
final Basket basket = new Basket();
// 定义苹果生产者
class Producer implements Runnable {
public void run() {
try {
while (true) {
// 生产苹果
System.out.println("生产者准备生产苹果:" + System.currentTimeMillis());
basket.produce();
System.out.println("生产者生产苹果完毕:" + System.currentTimeMillis());
// 休眠300ms
Thread.sleep(300);
}
} catch (InterruptedException ex) {
}
}
}
// 定义苹果消费者
class Consumer implements Runnable {
public void run() {
try {
while (true) {
// 消费苹果
System.out.println("消费者准备消费苹果:" + System.currentTimeMillis());
basket.consume();
System.out.println("消费者消费苹果完毕:" + System.currentTimeMillis());
// 休眠1000ms
Thread.sleep(1000);
}
} catch (InterruptedException ex) {
}
}
}
ExecutorService service = Executors.newCachedThreadPool();
Producer producer = new Producer();
Consumer consumer = new Consumer();
// 提交两个线程到线程池里
service.submit(producer);
service.submit(consumer);
// 程序运行5s后,所有任务停止
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
}
service.shutdownNow();
}
public static void main(String[] args) {
QueueMain.testBasket();
}
}
分享到:
相关推荐
`BlockingQueue`接口有几个具体实现类,根据不同的应用场景可以选择不同的实现: - **ArrayBlockingQueue**: 一种固定大小的`BlockingQueue`,在构造时需要指定其容量大小。队列中的元素按照FIFO(先进先出)原则...
在Java并发编程中,BlockingQueue是一个非常重要的接口,它提供了线程安全的队列操作,特别是在生产者-消费者模式中发挥着核心作用。本文将深入探讨BlockingQueue的工作原理、常见实现、使用场景以及代码示例。 在...
《C++实现的跨平台BlockingQueue详解》 在软件开发中,线程间的通信和同步是必不可少的部分。...在理解其工作原理和实现细节后,我们可以灵活地应用到各种并发场景中,提升软件的性能和可维护性。
在实际应用中,BlockingQueue常用于构建并发系统,如工作调度、消息队列等。例如,生产者线程通过`put()`方法将任务放入队列,消费者线程通过`take()`方法取出并执行任务。这种方式既保证了线程间的同步,又避免了...
阻塞队列的应用场景: 1. ArrayBlockingQueue:使用数组作为底层数据结构的阻塞队列。 2. LinkedBlockingQueue:使用链表作为底层数据结构的阻塞队列。 3. SynchronousQueue:一个不存储元素的阻塞队列,生产者和...
当我们谈论"Spring BlockingQueue"时,我们实际上是在讨论如何在Spring Boot应用中使用Java并发库中的BlockingQueue接口。 BlockingQueue是一种线程安全的数据结构,它在多线程环境下的数据共享和通信中扮演着关键...
Java 并发集合:ConcurrentHashMap 和 ...Java 并发集合(ConcurrentHashMap 和 BlockingQueue)提供了高效的并发操作和线程安全机制,广泛应用于多种场景,例如多线程编程、数据存储和访问、生产者-消费者模式等。
10. **实例应用** - `ExecutorService`的`ThreadPoolExecutor`类就利用`BlockingQueue`来存储待执行的任务。 - 消息队列中间件如RabbitMQ、Kafka等在Java客户端API中也广泛使用`BlockingQueue`进行消息传递。 ...
分析这个测试文件可以帮助我们更好地理解和应用`BlockingQueue`。实际操作中,我们可以通过监控和调优这些代码来优化并发性能,比如调整队列大小,选择适合的实现类,或者优化生产者和消费者的处理速度。
"java并发学习之BlockingQueue实现生产者消费... 通过本文的学习,读者可以了解BlockingQueue的基本概念、特点和应用场景,并且可以掌握BlockingQueue的使用方法和实现技巧,从而更好地应用BlockingQueue在实际项目中。
本文将深入探讨 BlockingQueue 的原理、特性以及如何在实际应用中使用。 ### 1. BlockingQueue概述 BlockingQueue 是一个并发容器,它实现了队列的接口,同时具备阻塞功能。当队列为空时,尝试从队列中获取元素的...
6. 生产者-消费者模型在并发编程中的应用。 这些内容对于理解和优化Java并发程序的性能至关重要,也是面试和实际开发中经常遇到的问题。通过深入学习和实践这些知识点,开发者能够编写出更高效、更健壮的并发代码。
在实际应用中,`BlockingQueue`和`BlockingDeque`常被用来实现工作队列、缓存、线程池等并发组件,例如`ThreadPoolExecutor`就利用`BlockingQueue`来存储等待执行的任务。 理解`BlockingQueue`和`BlockingDeque`的...
总结来说,`spring MVC 初始启动concurrent blocking queue`涉及的是在Spring MVC应用启动时使用`@PostConstruct`注解初始化并使用`BlockingQueue`进行并发控制和任务处理。这一技术可以帮助提高系统性能,特别是在...
阻塞队列BlockingQueue是Java并发编程中一个重要的数据结构,它是线程安全的队列,主要用于生产者消费者模型中的数据交换。在Java的`java.util.concurrent`包中,提供了多种实现阻塞队列的类,如`ArrayBlockingQueue...
Java中的阻塞队列BlockingQueue是一种并发编程中常用的工具,它实现了线程间的同步和通信。...通过选择适当的实现类和使用适当的方法,开发者可以灵活地构建各种并发应用,例如生产者-消费者模型、工作窃取算法等。
### 10、阻塞队列BlockingQueue 实战及其原理分析 #### 一、阻塞队列概述 阻塞队列(BlockingQueue)是Java语言中`java.util.concurrent`包下提供的一种重要的线程安全队列。它继承自`Queue`接口,并在此基础上...
本文将深入探讨 BlockingQueue 的概念、工作原理,并结合 "blockingqueue-example" 示例项目,帮助读者掌握其实际应用。 ### 一、 BlockingQueue 概念 BlockingQueue 是 Java Concurrency API 中的接口,位于 `...
生产者消费者模式是一种经典的多线程同步问题解决方案,在Java中有着广泛的应用。它主要用于解决系统中数据处理的并发问题,确保生产者线程与消费者线程之间的协作与数据的有序处理。这种模式遵循一个基本原理:生产...
Java多线程应用是Java编程中的重要组成部分,它允许程序同时执行多个任务,提升系统效率。在现代软件开发中,特别是在服务器端应用和高并发场景下,熟练掌握Java多线程技术至关重要。以下是对给定文件中涉及的知识点...