`
annan211
  • 浏览: 460967 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java 实现生产者消费者模式

阅读更多
package cosu_pro.pc;

import java.util.Random;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;

public class LinkBolckingQueuePC {
	public static void main(String[] args) {
		Storage storage = new Storage();
		Consumer c = new Consumer(storage);
		Producer p = new Producer(storage);

		ExecutorService execuService = Executors.newCachedThreadPool();
		execuService.submit(p);
		execuService.submit(c);
	}

}

// storage
 class Storage{
	 BlockingQueue<Integer> storage = new LinkedBlockingQueue<Integer>(10);

	 public int  push(int i){
		 storage.add(i);
		 return i;
	 }

	 public int prop() throws InterruptedException{
		return  storage.take();
	 }
 }

 // consumer
 class Consumer implements Runnable{

	private Storage storage = null;
	public Consumer(Storage s){
		this.storage = s;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		while(true){
			try {
				System.out.println("消费商品-----"+storage.prop());
				Thread.yield();
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
 }

 class Producer implements Runnable{
	 private Storage storage = null;
	 public Producer(Storage s){
		 this.storage = s;
	 }
	@Override
	public void run() {
		// TODO Auto-generated method stub
		while(true){
			System.out.println("生产商品----"+storage.push(new Random().nextInt(10)));
			try {
				Thread.yield();
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

 }

分享到:
评论

相关推荐

    java实现生产者消费者

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

    生产者消费者问题和先来先服务算法

    在Java中,生产者消费者问题的实现通常涉及`BlockingQueue`接口,如`ArrayBlockingQueue`。生产者线程使用`put()`方法添加元素到队列,若队列已满则会被阻塞;消费者线程使用`take()`方法获取并移除元素,若队列为空...

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

    在提供的文件"stack"中,可能包含了一个使用栈作为缓冲区的生产者消费者模式实现。栈具有后进先出(LIFO)的特性,适合作为简单的缓冲区。具体实现可能包括了`Stack`类,用于表示栈,并包含了生产和消费的方法,以及...

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

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

    Java 生产者消费者模式

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

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

    在Java中,我们可以通过`java.util.concurrent`包中的`BlockingQueue`来实现生产者消费者模式。`BlockingQueue`是一个线程安全的数据结构,它提供了一种在生产者和消费者之间同步的方法,当队列满时,生产者会被阻塞...

    生产者与消费者 java实现

    生产者与消费者问题在计算机科学中是一个经典的多线程同步问题,主要涉及到进程间的通信和资源的共享。在Java中,我们通常通过`wait()`、`...理解并掌握生产者与消费者模式有助于编写高效、可靠的多线程应用程序。

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

    这个库提供了多种工具类,如Semaphore(信号量)、BlockingQueue(阻塞队列)和Condition(条件变量),这些都可以用来实现生产者-消费者模型。 1. **BlockingQueue**: 阻塞队列是一种特殊的队列,它具有线程安全的...

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

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

    Java 生产消费者模式

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

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

    在Java中实现生产者消费者模式,主要依赖于Java提供的并发工具类,如`BlockingQueue`接口以及其实现类,如`ArrayBlockingQueue`、`LinkedBlockingQueue`等。这些队列具有线程安全的特性,能够有效地避免数据竞争和...

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

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

    java生产者消费者

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

    生产者消费者java实现

    详细的生产者消费者的java实现过程,详细的生产者消费者的java实现过程,详细的生产者消费者的java实现过程

    java生产者消费者demo

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

    Java生产者与消费者

    以上就是Java中实现生产者与消费者模式的基本步骤。这个模式通过合理地分配资源,避免了生产者过度生产导致的浪费,同时也防止了消费者在无数据可消费时的空耗。此外,还可以通过扩展线程数量,实现更复杂的并发处理...

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

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

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

    - **阻塞队列(BlockingQueue)**:Java中的`BlockingQueue`接口用于实现生产者消费者模式的关键组件。它提供了一种线程安全的数据交换方式,当队列满时,生产者会被阻塞,直到消费者取走数据;反之,当队列空时,...

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

    在JDK 1.5及以后的版本中,Java引入了`java.util.concurrent`包,其中包含了一些强大的并发工具类,如`Lock`接口和`Condition`接口,这些工具大大提升了生产者消费者模式的实现效率和线程安全性。 生产者消费者模式...

Global site tag (gtag.js) - Google Analytics