`

BlockingQueue的应用

 
阅读更多
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

    `BlockingQueue`接口有几个具体实现类,根据不同的应用场景可以选择不同的实现: - **ArrayBlockingQueue**: 一种固定大小的`BlockingQueue`,在构造时需要指定其容量大小。队列中的元素按照FIFO(先进先出)原则...

    Java中的BlockingQueue:深入理解与实践应用

    在Java并发编程中,BlockingQueue是一个非常重要的接口,它提供了线程安全的队列操作,特别是在生产者-消费者模式中发挥着核心作用。本文将深入探讨BlockingQueue的工作原理、常见实现、使用场景以及代码示例。 在...

    C++写的跨平台BlockingQueue

    《C++实现的跨平台BlockingQueue详解》 在软件开发中,线程间的通信和同步是必不可少的部分。...在理解其工作原理和实现细节后,我们可以灵活地应用到各种并发场景中,提升软件的性能和可维护性。

    BlockingQueue的使用

    在实际应用中,BlockingQueue常用于构建并发系统,如工作调度、消息队列等。例如,生产者线程通过`put()`方法将任务放入队列,消费者线程通过`take()`方法取出并执行任务。这种方式既保证了线程间的同步,又避免了...

    14-阻塞队列BlockingQueue实战及其原理分析二.pdf

    阻塞队列的应用场景: 1. ArrayBlockingQueue:使用数组作为底层数据结构的阻塞队列。 2. LinkedBlockingQueue:使用链表作为底层数据结构的阻塞队列。 3. SynchronousQueue:一个不存储元素的阻塞队列,生产者和...

    spring-blockingqueue:用Spring Boot阻止队列

    当我们谈论"Spring BlockingQueue"时,我们实际上是在讨论如何在Spring Boot应用中使用Java并发库中的BlockingQueue接口。 BlockingQueue是一种线程安全的数据结构,它在多线程环境下的数据共享和通信中扮演着关键...

    Java-concurrent-collections-concurrenthashmap-blockingqueue.pdf

    Java 并发集合:ConcurrentHashMap 和 ...Java 并发集合(ConcurrentHashMap 和 BlockingQueue)提供了高效的并发操作和线程安全机制,广泛应用于多种场景,例如多线程编程、数据存储和访问、生产者-消费者模式等。

    java中线程队列BlockingQueue的用法

    10. **实例应用** - `ExecutorService`的`ThreadPoolExecutor`类就利用`BlockingQueue`来存储待执行的任务。 - 消息队列中间件如RabbitMQ、Kafka等在Java客户端API中也广泛使用`BlockingQueue`进行消息传递。 ...

    并发容器——BlockingQueue相关类

    分析这个测试文件可以帮助我们更好地理解和应用`BlockingQueue`。实际操作中,我们可以通过监控和调优这些代码来优化并发性能,比如调整队列大小,选择适合的实现类,或者优化生产者和消费者的处理速度。

    java并发学习之BlockingQueue实现生产者消费者详解

    "java并发学习之BlockingQueue实现生产者消费... 通过本文的学习,读者可以了解BlockingQueue的基本概念、特点和应用场景,并且可以掌握BlockingQueue的使用方法和实现技巧,从而更好地应用BlockingQueue在实际项目中。

    基于java中BlockingQueue的使用介绍

    本文将深入探讨 BlockingQueue 的原理、特性以及如何在实际应用中使用。 ### 1. BlockingQueue概述 BlockingQueue 是一个并发容器,它实现了队列的接口,同时具备阻塞功能。当队列为空时,尝试从队列中获取元素的...

    2011.08.30(2)——— java BlockingQueue ExecutorService

    6. 生产者-消费者模型在并发编程中的应用。 这些内容对于理解和优化Java并发程序的性能至关重要,也是面试和实际开发中经常遇到的问题。通过深入学习和实践这些知识点,开发者能够编写出更高效、更健壮的并发代码。

    Java 多线程与并发(16-26)-JUC集合- BlockingQueue详解.pdf

    在实际应用中,`BlockingQueue`和`BlockingDeque`常被用来实现工作队列、缓存、线程池等并发组件,例如`ThreadPoolExecutor`就利用`BlockingQueue`来存储等待执行的任务。 理解`BlockingQueue`和`BlockingDeque`的...

    spring MVC 初始启动blocking queue

    总结来说,`spring MVC 初始启动concurrent blocking queue`涉及的是在Spring MVC应用启动时使用`@PostConstruct`注解初始化并使用`BlockingQueue`进行并发控制和任务处理。这一技术可以帮助提高系统性能,特别是在...

    10、阻塞队列BlockingQueue实战及其原理分析

    阻塞队列BlockingQueue是Java并发编程中一个重要的数据结构,它是线程安全的队列,主要用于生产者消费者模型中的数据交换。在Java的`java.util.concurrent`包中,提供了多种实现阻塞队列的类,如`ArrayBlockingQueue...

    java 中 阻塞队列BlockingQueue详解及实例

    Java中的阻塞队列BlockingQueue是一种并发编程中常用的工具,它实现了线程间的同步和通信。...通过选择适当的实现类和使用适当的方法,开发者可以灵活地构建各种并发应用,例如生产者-消费者模型、工作窃取算法等。

    10、阻塞队列BlockingQueue实战及其原理分析.pdf

    ### 10、阻塞队列BlockingQueue 实战及其原理分析 #### 一、阻塞队列概述 阻塞队列(BlockingQueue)是Java语言中`java.util.concurrent`包下提供的一种重要的线程安全队列。它继承自`Queue`接口,并在此基础上...

    blockingqueue-example

    本文将深入探讨 BlockingQueue 的概念、工作原理,并结合 "blockingqueue-example" 示例项目,帮助读者掌握其实际应用。 ### 一、 BlockingQueue 概念 BlockingQueue 是 Java Concurrency API 中的接口,位于 `...

    生产者消费者模式在java中的应用

    生产者消费者模式是一种经典的多线程同步问题解决方案,在Java中有着广泛的应用。它主要用于解决系统中数据处理的并发问题,确保生产者线程与消费者线程之间的协作与数据的有序处理。这种模式遵循一个基本原理:生产...

    Java多线程应用

    Java多线程应用是Java编程中的重要组成部分,它允许程序同时执行多个任务,提升系统效率。在现代软件开发中,特别是在服务器端应用和高并发场景下,熟练掌握Java多线程技术至关重要。以下是对给定文件中涉及的知识点...

Global site tag (gtag.js) - Google Analytics