`
freshunter
  • 浏览: 16432 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java生产者消费者模式代码

阅读更多
package org.hkw.multithread;

public class ThreadDCTest {

	public static void main(String[] args) {
		Thread p = new Thread(new Producer("p1"));
		Thread p2 = new Thread(new Producer("p2"));
		Thread c = new Thread(new Consumer("c1"));
		Thread c2 = new Thread(new Consumer("c2"));
		p.start();
		p2.start();
		c.start();
		c2.start();

		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		// Storehouse.getInstance().close();
		p.interrupt();
		p2.interrupt();
		c.interrupt();
		c2.interrupt();

	}

}

class Storehouse {
	static final int STATUS_EMPETY = 0;
	static final int STATUS_FULL = 1;
	boolean isClosed = false;
	String item;
	int status;
	private static Storehouse house = new Storehouse();

	private Storehouse() {
	}

	public static Storehouse getInstance() {
		return house;
	}

	public String getItem() {
		status = STATUS_EMPETY;
		return item;
	}

	public void setItem(String item) {
		status = STATUS_FULL;
		this.item = item;
	}

	public int getStatus() {
		return status;
	}

	public boolean isEmpty() {
		return status == STATUS_EMPETY;
	}

	public boolean isClosed() {
		return isClosed;
	}

	public void close() {
		isClosed = true;
	}
	
	public synchronized void produce(String name) throws InterruptedException
	{
		if (isEmpty()) {
			String item = name + " fill";
			System.out.println(name + " produce item:" + item);
			setItem(item);
			notifyAll();
		} else {
			wait();
		}
	}
	public synchronized void consum(String name) throws InterruptedException{
		if (!isEmpty()) {
			System.out.println(name + " consum item:" + house.getItem());
			notifyAll();
		} else {
			wait();
		}
	}

}

class Producer implements Runnable {
	Storehouse house = Storehouse.getInstance();
	String name;

	public Producer(String name) {
		this.name = name;
	}

	@Override
	public void run() {
		System.out.println(name + " producer start");
		while (!Thread.currentThread().isInterrupted() && !house.isClosed()) {
			try {
				house.produce(name);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				System.out.println(name + " producer interrupted");
				Thread.currentThread().interrupt();
			}
		}
		System.out.println(name + " producer end");
	}
}

class Consumer implements Runnable {
	Storehouse house = Storehouse.getInstance();
	String name;

	public Consumer(String name) {
		this.name = name;
	}

	@Override
	public void run() {
		System.out.println(name + " cosumer start");
		while (!Thread.currentThread().isInterrupted() && !house.isClosed()) {
			try {
				house.consum(name);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				System.out.println(name + " cosumer interrupted");
				Thread.currentThread().interrupt();
			}
		}
		System.out.println(name + " consumer end");

	}
}
0
4
分享到:
评论

相关推荐

    java实现生产者消费者

    在Java中,`java.util.concurrent`包下的`BlockingQueue`接口提供了一种线程安全的数据结构,非常适合用于实现生产者消费者模式。生产者将产品放入队列,消费者从队列中取出产品。`BlockingQueue`提供了`put()`和`...

    Java 生产者消费者模式

    在Java编程中,生产者消费者模式是一种典型的多线程协作模型,用于解决系统资源供需不平衡的问题。这个模式的核心思想是将生产数据和消费数据的过程解耦,使得生产者可以独立地生产数据,而消费者可以独立地消费数据...

    java生产者消费者

    Java生产者消费者模式是一种多线程设计模式,它在并发编程中被广泛使用,用于解决资源的共享问题。在这个模式中,"生产者"负责创建数据,而"消费者"则负责处理这些数据。它们通过一个共享的数据缓冲区进行通信,避免...

    java多线程实现生产者和消费者

    通过理解和掌握这些知识点,开发者能够有效地实现生产者-消费者模式,解决并发编程中的数据共享和协作问题。在实际项目中,这个模式常用于优化系统性能,尤其是在I/O密集型或计算密集型的应用中。

    Java多线程 生产者-消费者模式

    在Java中,我们可以使用`java.util.concurrent`包中的工具类来实现生产者-消费者模式。`BlockingQueue`接口是最常用的实现方式,它提供了线程安全的数据结构,可以用来作为生产者和消费者之间的缓冲区。例如,我们...

    java生产者消费者demo

    在这个"java生产者消费者demo"中,开发者使用了适配器模式来构建解决方案。适配器模式是一种设计模式,它允许不同接口的类协同工作,即使它们原本无法直接交互。在生产者消费者问题中,适配器模式可能被用来协调生产...

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

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

    Java 生产消费者模式

    Java生产消费者模式是一种经典的并发设计模式,用于解决多个线程之间的协作问题。在这个模式中,生产者负责生成数据,而消费者则负责消费这些数据。它基于“缓冲区”概念,即一个有限大小的数据存储区域,生产者将...

    java 多线程 生产者消费者模式

    Java多线程编程是开发高并发、高性能应用的关键技术之一,而生产者消费者模式是多线程编程中常用的一种设计模式。它通过分离数据的生产和消费过程,实现了线程间的协同工作,有效避免了资源的竞争和浪费。在这个模式...

    java 多线程 生产者消费者模式源码

    java 多线程 生产者消费者模式,多个生产者对多个消费者,使用jdk 线程池及 BlockingQueue实现,解决了待生产的任务生产完成后,正常终止所有线程,避免线程(特别是消费者线程)因阻塞而无限等待的情况。源码中还简单...

    生产者和消费者模式多线程

    创建一个简单的生产者消费者模型,可以使用以下伪代码: ```java class Producer implements Runnable { private final BlockingQueue<String> queue; public Producer(BlockingQueue<String> queue) { this....

    多线程简易实现生产者消费者模式

    生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...

    Java生产者与消费者

    在实际应用中,Java提供了更高级的并发工具类,如`BlockingQueue`,它已经内置了线程安全和阻塞操作,可以简化生产者与消费者模式的实现,提高代码的可读性和可维护性。例如,我们可以使用`ArrayBlockingQueue`作为...

    java生产者消费者模式

    在Java中,有多种实现生产者消费者模式的方法,主要包括: 1. **wait() / notify()方法**:这是基于Object类中的两个方法,适用于任何对象。生产者或消费者在需要等待时调用wait(),释放锁并进入等待状态;当条件...

    java生产者消费者模型

    Java生产者消费者模型是多线程编程中一种经典的并发控制模型,它源于操作系统中的哲学思想,用于解决资源的共享和异步处理问题。在该模型中,"生产者"线程负责生成数据,而"消费者"线程则负责消费这些数据。两者之间...

    Java JDK1.5 生产消费者模式解决方案

    总的来说,使用`Lock`和`Condition`实现的生产者消费者模式相比传统的`synchronized`和`wait()`/`notify()`,在代码可读性、灵活性和性能上都有所提升。这使得开发者能够更高效、更可控地处理并发问题。在JDK 5.0...

    界面话模拟生产者消费者模式java

    在"界面话模拟生产者消费者模式java"的项目中,开发者创建了一个用户界面,允许用户自定义生产者生产数据的数量、消费者消费数据的数量,以及仓库(缓冲区)的最大容量、最小剩余量,还有生产者每次生产的数据量和...

    java生产者与消费者实验报告

    ### Java生产者与消费者模型详解 #### 实验背景与目的 在并发编程中,生产者-消费者模式是一种经典的解决同步问题的设计模式。本实验旨在通过实际编程操作,深入理解Java中生产者与消费者模型的工作机制及其同步...

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

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

Global site tag (gtag.js) - Google Analytics