生产者消费者模型的Java简单实现

package testjava.thread;
public class SellBuy {
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Q q = new Q();
  new Thread(new Producer(q)).start();
  new Thread(new Comsumer(q)).start();
 }
}
class Producer implements Runnable
{
 Q q;
 public Producer(Q q)
 {
  this.q=q;
 }
 public void run()
 {
  int i=0;
  while(true)
  {
   if(i==0)
    q.put("zhangsan","male");
   else
    q.put("lisi","femail");
   i=(i+1)%2;
  }
 }
}
class Comsumer implements Runnable
{
 Q q;
 public Comsumer(Q q)
 {
  this.q=q;
 }
 public void run()
 {
  while(true)
  {
   q.get();
  }
 }
}
class Q
{
 String name="unknown";
 String sex="unkonwn";
 boolean bFull=false;
 public synchronized void put(String name,String sex)
 {
  if(bFull)
   try {wait();} catch (Exception e) {}
  this.name=name;
  try {Thread.sleep(1);} catch (Exception e) {}
  this.sex=sex;
  bFull=true;
  notify();
 }
 public synchronized void get()
 {
  if(!bFull)
   try {wait();} catch (Exception e) {}
  System.out.println(name+":"+sex);
  bFull=false;
  notify();
 }
}

时间: 2024-12-05 07:07:28

生产者消费者模型的Java简单实现的相关文章

Java线程:并发协作-生产者消费者模型

实际上,准确说应该是"生产者-消费者-仓储"模型,离开了仓储,生产者消费者模型就显得没有说服力了. 对于此模型,应该明确一下几点: 1.生产者仅仅在仓储未满时候生产,仓满则停止生产. 2.消费者仅仅在仓储有产品时候才能消费,仓空则等待. 3.当消费者发现仓储没产品可消费时候会通知生产者生产. 4.生产者在生产出可消费产品时候,应该通知等待的消费者去消费. 此模型将要结合java.lang.Object的wait与notify.notifyAll方法来实现以上的需求.这是非常重要的. /

如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例

wait, notify 和 notifyAll,这些在多线程中被经常用到的保留关键字,在实际开发的时候很多时候却并没有被大家重视.本文对这些关键字的使用进行了描述. 在 Java 中可以用 wait.notify 和 notifyAll 来实现线程间的通信..举个例子,如果你的Java程序中有两个线程--即生产者和消费者,那么生产者可以通知消费者,让消费者开始消耗数据,因为队列缓冲区中有内容待消费(不为空).相应的,消费者可以通知生产者可以开始生成更多的数据,因为当它消耗掉某些数据后缓冲区不再

使用阻塞队列实现生产者-消费者模型

1.生产者-消费者问题 生产者消费者问题也称作有界缓冲区(bounded-buffer)问题, 是操作系统中一个经典的线程同步问题,问题描述如下: 生产者在生产产品提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个具有多个缓冲区,生产者将它生产的产品放入缓冲区中,消费者可以从缓冲区中取走产品进行消费,两个进程共享一个公共的固定大小的缓冲区. 显然生产者和消费者之间必须保持同步,即不允许消费者到一个空的缓冲区中取产品,也不允许生产者向一个已经放入产品的缓冲区中再次投放产品

【Python之旅】第六篇(五):生产者消费者模型实现多线程异步交互

 虽然标题是"生产者消费者模型实现多线程异步交互",但这里要说的应该还包括Python的消息队列,因为这里多线程异步交互是通过Python的消息队列来实现的,因此主要内容如下: 1 2 3 4 1.生产者消费者模型:厨师做包子与顾客吃包子 2.Python的消息队列 3.利用消息队列实现Python多线程异步交互 4.再谈耦合度的问题 1.生产者消费者模型     通过厨师做包子与顾客吃包子来引出生产者消费者模型,如下图:     这里,厨师相当于生产者,顾客相当于消费者,顾客吃包子,

生产者消费者问题的java实现

生产者和消费者是多线程经典的问题,生产者和消费者问题的核心是同步的问题,同步问题的核心是要保证同一个资源被多个线程并发访问时的完整性,常用的方法是采用信号或加锁机制,保证资源在任一时刻只能被一个线程访问.这一问题用java来实现的话主要有4种方式.1.wait()/notify():2.await()/signal(); 3.blockingQuene 4.PipedInputStream/pipedOutputStream 下面分别来实现. 1.利用wait()和notify()来实现 Wai

Java并发编程中的生产者与消费者模型简述_java

概述对于多线程程序来说,生产者和消费者模型是非常经典的模型.更加准确的说,应该叫"生产者-消费者-仓库模型".离开了仓库,生产者.消费者就缺少了共用的存储空间,也就不存在并非协作的问题了. 示例定义一个场景.一个仓库只允许存放10件商品,生产者每次可以向其中放入一个商品,消费者可以每次从其中取出一个商品.同时,需要注意以下4点: 1.  同一时间内只能有一个生产者生产,生产方法需要加锁synchronized. 2.  同一时间内只能有一个消费者消费,消费方法需要加锁synchroni

深入并行:从生产者到消费者模型深度理解Oracle的并行

陈焕生 Oracle Real-World Performance Group 成员,senior performance engineer,专注于 OLTP.OLAP 系统 在 Exadata 平台和 In-Memory 特性上的最佳实践.个人博客 http://dbsid.com . 编辑手记:感谢陈焕生授权我们发布他的精品文章,Sidney撰写这个系列的文章时间跨度也有两年,下篇刚刚出炉,我们先从他去年投稿的第一篇开始. Oracle 的并行执行 Oracle 的并行执行是一种分而治之的方

java多线程解决生产者消费者问题_java

本文实例讲述了java多线程解决生产者消费者问题的方法.分享给大家供大家参考.具体分析如下: 题目是这样的: 采用Java 多线程技术,设计实现一个符合生产者和消费者问题的程序.对一个对象(枪膛)进行操作,其最大容量是12颗子弹.生产者线程是一个压入线程,它不断向枪膛中压入子弹:消费者线程是一个射出线程,它不断从枪膛中射出子弹. 要求: (1)给出分析过程说明. (2)程序输出,要模拟体现对枪膛的压入和射出操作: (2)设计程序时应考虑到两个线程的同步问题. 这个和著名的生产者消费者问题几乎是一

Linux C实现生产者消费者问题

//信号量---线程间通信 //"生产者消费者" 问题 #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<semaphore.h> #include<pthread.h> #define msleep(x) usleep(x*1000) #define PRODUCT_SPEED 3 //生产速度 #define CONSUM_SPEED 1 //