`

基于ArrayBlockingQueue的生产者和消费者

 
阅读更多

学习写的测试,可能有BUG。

有了ArrayBlockingQueye,写生产者和消费者方便多了。

之前的一篇关于生产者和消费者的,一堆代码http://hongmin118.iteye.com/blog/865222

package com.mhm.test1;

import java.util.concurrent.ArrayBlockingQueue;

/**
 * 用ArrayBlockingQueue实现生产者和消费者
 * @author Mahone
 *
 */
public class BoundedBuffer {
	public static void main(String[] args) {
		final ArrayBlockingQueue<Integer> queue = new ArrayBlockingQueue<Integer>(10);
		
		/*
		 * 一个消费者,一直在消费
		 */
		new Thread(new Runnable() {
			@Override
			public void run() {
				while (true) {
					try {
						Integer i = queue.take();
						System.out.println(Thread.currentThread().getName() + " 取出" + i);
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}).start();
		
		
		/*
		 * 10个生产者同时生产,每人生产一次
		 */
		for (int i = 0; i < 10; i++) {
			final int temp = i;
			new Thread(new Runnable() {
				@Override
				public void run() {
					try {
						synchronized (BoundedBuffer.class) {
							queue.put(temp);
							System.out.println(Thread.currentThread().getName() + " 放入[" + temp + "]");
						}
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}).start();
		}
	}
}

 

 

分享到:
评论

相关推荐

    java 编写的生产者与消费者问题

    生产者和消费者可以基于特定条件(如缓冲区是否为空或满)进行等待和唤醒。 4. **多线程技术**: 使用`Thread`类或者`Runnable`接口创建生产者和消费者线程。生产者和消费者在各自的线程中运行,通过调用`...

    java生产者消费者图形界面模拟

    这个课程设计基于Java Swing库构建了一个图形用户界面(GUI),用于演示和理解生产者消费者模式。 生产者消费者模式是软件设计中的一种设计模式,它解决了一个或多个人或程序(生产者)如何有效地向另一个或多个...

    生产者与消费者实例代码,线程学习必备

    - **条件变量**:生产者和消费者可以基于特定条件(如缓冲区满或空)挂起和唤醒对方。当条件满足时,线程被唤醒继续执行。 3. **Java中的实现**: - 使用`java.util.concurrent`包中的`BlockingQueue`接口,如`...

    java多线程实现生产者消费者关系

    在Java中,我们可以使用BlockingQueue接口及其实现类(如ArrayBlockingQueue)来实现生产者消费者模型。BlockingQueue提供了一种线程安全的队列,它内置了同步机制,使得生产者在队列满时会被阻塞,消费者在队列空时...

    精选_毕业设计_基于JAVA的生产者消费者问题_完整源码

    在这个“精选_毕业设计_基于JAVA的生产者消费者问题_完整源码”项目中,开发者通过Java语言实现了一个解决方案,旨在教授如何在实际应用中处理这种问题。以下是对该项目的详细解析: 生产者消费者问题是多线程编程...

    生产者消费者问题

    以下是使用`ArrayBlockingQueue`实现生产者消费者问题的一个简化示例: ```java import java.util.concurrent.ArrayBlockingQueue; public class ProducerConsumerExample { private final ArrayBlockingQueue...

    操作系统课程设计多线程 生产者消费者问题

    综上所述,这个"操作系统课程设计多线程 生产者消费者问题"项目将涵盖Java多线程编程、并发控制、线程安全的数据结构和通信机制等多个重要知识点,对理解并发编程有极大的实践价值。在实际操作中,需要综合运用这些...

    java生产者消费者

    这个名为"生产者和消费者"的压缩包文件可能包含了实现上述逻辑的Java代码示例,对于初学者来说,通过阅读和理解这些代码,可以深入学习Java多线程编程和并发控制,进一步掌握生产者消费者模式的实现。

    多生产多消费者问题

    `ReentrantLock`是可重入的互斥锁,可以替代`synchronized`关键字,而`Condition`允许我们创建多个条件变量,这样生产者和消费者可以基于不同的条件进行等待和唤醒,提高了代码的可读性和可维护性。 在实际的工程...

    操作系统生产者消费者DEMO

    操作系统中的“生产者消费者问题”是一个经典的多线程同步模型,它主要涉及到进程通信和资源管理,对于理解和解决并发编程中的同步与互斥问题具有重要的理论价值和实践意义。在这个DEMO中,我们将深入探讨这个问题...

    消费者生产者程序 1到100间 按顺序 进,乱序有规律出

    在Java中,实现这种消费者生产者模型可以使用`java.util.concurrent`包下的工具,比如`BlockingQueue`接口及其实现,如`ArrayBlockingQueue`。生产者会调用`put`方法添加元素,而消费者使用`take`方法获取元素。为了...

    java生产者消费者模式

    这种方式简化了生产者消费者的实现,如ArrayBlockingQueue、LinkedBlockingQueue等。 生产者消费者模式的流程如下: - 生产者在仓储未满时生产产品,并将其放入缓冲区。 - 消费者在仓储有产品时进行消费,若无...

    消息分发框架(基于JAVA阻塞队列实现、 生产者消费者模型)

    基于Java的实现通常会利用阻塞队列(BlockingQueue)和生产者消费者模型来确保线程安全和高效率。在这个框架中,生产者负责生成任务或消息,而消费者则负责处理这些任务或消息。 ### Java 阻塞队列 Java阻塞队列是...

    线程间资源互斥与通信(生产者消费者)

    6. **Java并发库(java.util.concurrent)**:Java提供了强大的并发库,包括`BlockingQueue`接口和其实现如`ArrayBlockingQueue`,它们内置了线程安全的队列操作,使得生产者消费者模式的实现更为简洁。`...

    阻塞队列实现生产者消费者模式Java开发Java经验技巧共

    3. **生产者消费者模式**:文档会详细介绍如何设计生产者和消费者线程,如何通过阻塞队列进行通信。生产者通常调用`put()`将数据放入队列,消费者则调用`take()`从队列中取出数据。 4. **线程安全**:由于阻塞队列...

    Java 生产消费者模式

    它基于“缓冲区”概念,即一个有限大小的数据存储区域,生产者将产品放入缓冲区,而消费者从中取出产品。这种模式有效地避免了生产者与消费者之间的直接交互,提高了系统的并行性和效率。 在Java中,我们可以使用`...

    《生产者/消费者循环》后续资源包.zip

    这些例程可能包括简单的生产者线程不断向队列中添加数据,消费者线程从中取出并处理的场景,也可能包含更复杂的情况,如多个生产者和消费者,或者队列满和空时的等待策略。 前沿技术文档则可能涵盖了最新的并发编程...

    Java多线程 BlockingQueue实现生产者消费者模型详解

    在Java中,我们可以使用BlockingQueue来实现生产者消费者模型,BlockingQueue是Queue的子类,它提供了一个线程安全的队列,可以用于生产者和消费者之间的数据传输。 BlockingQueue的实现类有多种,常见的有...

    ArrayBlockingQueue源码分析.docx

    通过以上分析,我们可以看到 `ArrayBlockingQueue` 的核心在于其基于锁和条件变量的并发控制机制,以及有界的特性,这使得它成为一种高效且可控的并发数据结构,适用于生产者-消费者模型或其他需要同步和缓冲的场合...

    ArrayBlockingQueue源码解析-动力节点共

    这个队列基于数组实现,提供了在生产者和消费者之间进行数据交换的能力,同时确保了线程安全性和公平性。在本文中,我们将深入分析ArrayBlockingQueue的源码,探讨其内部实现机制、特性以及如何在实际应用中高效地...

Global site tag (gtag.js) - Google Analytics