import java.util.concurrent.locks.*;

public class Test9 {

public static void main(String[] args) {
// TODO 自动生成的方法存根
Resource r=new Resource();
Producer p=new Producer(r);
Consumer c=new Consumer(r);
Thread t0=new Thread(p);
Thread t1=new Thread(p);
Thread t2=new Thread(c);
Thread t3=new Thread(c);
t0.start();
t1.start();
t2.start();
t3.start();
}

}

class Resource
{
private String name;
private int count=1;
private boolean flag;

//创建一个锁对象。
Lock lock ;
//通过已有的锁获取两组监视器对象,一组监视生产者,一组监视消费者。
Condition producer_con ;
Condition consumer_con ;
public Resource()
{
this.lock= new ReentrantLock();
this.producer_con = lock.newCondition();
this.consumer_con = lock.newCondition();
}

public void set(String name)
{
lock.lock();
try {
while(flag)
producer_con.await();
this.name=name+count;
count++;
System.out.println(Thread.currentThread().getName()+"....生产者..."+this.name);
flag=true;
consumer_con.signal();
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally{
lock.unlock();
}
}
public void get()
{
lock.lock();
try {
while(!flag)
consumer_con.await();
System.out.println(Thread.currentThread().getName()+"....消费者......."+this.name);
flag=false;
producer_con.signal();
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally{
lock.unlock();
}

}
}
class Producer implements Runnable
{

Resource r=null;
public Producer(Resource r)
{
this.r=r;
}
public void run() {
// TODO 自动生成的方法存根
while(true)
r.set("烤鸭");
}

}

class Consumer implements Runnable
{

Resource r=null;
public Consumer(Resource r)
{
this.r=r;
}
public void run() {
// TODO 自动生成的方法存根
while(true)
r.get();
}
}

java的多生产者多消费者例子的更多相关文章

  1. Windows下RabbitMQ 的下载、配置、Java实现生产者和消费者例子

    RabbitMQ是一个轻量级的消息代理中间件,支持多种消息通信协议,支持分布式部署,支持运行于多个操作系统,具有灵活.高可用等特性.RabbitMQ支持多种协议,其中最为重要的是高级消息队列协议(AM ...

  2. Java中的生产者、消费者问题

    Java中的生产者.消费者问题描述: 生产者-消费者(producer-consumer)问题, 也称作有界缓冲区(bounded-buffer)问题, 两个进程共享一个公共的固定大小的缓冲区(仓库) ...

  3. 0032ActiveMQ之java编码实现生产者和消费者操作队列queue

    今天学习了入门级的用java编写生产者producer和消费者consumer操作activemq的queue队列,为了之后复习回顾,现做整理如下: maven工程的搭建此处不再讲解,在maven工程 ...

  4. java线程中生产者与消费者的问题

    一.概念 生产者与消费者问题是一个金典的多线程协作的问题.生产者负责生产产品,并将产品存放到仓库:消费者从仓库中获取产品并消费.当仓库满时,生产者必须停止生产,直到仓库有位置存放产品:当仓库空时,消费 ...

  5. java学习之生产者和消费者案例

    package com.gh.thread; /** * 生产者和消费者案例 * wait和sleep的区别 * wait不让出监视器锁,sleep让出监视器的锁 * @author ganhang ...

  6. Java中的生产者和消费者实例(多线程 等待唤醒机制)

    1.什么是等待唤醒 我们实现的效果 创建生产者和消费者  对服装进行生产  和售卖 实现生产一个就消费一个 来观察线程的各种状态 下面是用到的方法: wait()方法:让一个线程进行等待 另外一个线程 ...

  7. Java 实践:生产者与消费者

    实践项目:生产者与消费者[经典多线程问题] 问题引出: 生产者和消费者指的是两个不同的线程类对象,操作同一个空间资源的情况. 需求引出: —— 生产者负责生产数据,消费者负责取走数据 —— 生产者生产 ...

  8. Java实现Kafka的生产者和消费者例子

    Kafka的结构与RabbitMQ类似,消息生产者向Kafka服务器发送消息,Kafka接收消息后,再投递给消费者.生产者的消费会被发送到Topic中,Topic中保存着各类数据,每一条数据都使用键. ...

  9. java中的生产者和消费者的问题

    1----使用Java.util.concurrent.locks包中的lock接口取代synchronized,通过ReentrantLock这个已经实现Lock接口的类, 创建ReentrantL ...

随机推荐

  1. Java爬虫系列三:使用Jsoup解析HTML

    在上一篇随笔<Java爬虫系列二:使用HttpClient抓取页面HTML>中介绍了怎么使用HttpClient进行爬虫的第一步--抓取页面html,今天接着来看下爬虫的第二步--解析抓取 ...

  2. ES6之Array.includes()函数

    一.定义 includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false. 二.语法 arr.includes(searchElement) arr.includ ...

  3. android中添加只有border-left的样式

    如何在android中的边框添加只有左边边框有颜色的样式呢 1. 相应的drawable文件 <?xml version="1.0" encoding="utf-8 ...

  4. 平衡树与可持久化treap

    平衡树(二叉树) 线段树不支持插入or删除一个数于是平衡树产生了 常见平衡树:treap(比sbt慢,好写吧),SBT(快,比较好写,有些功能不支持),splay(特别慢,复杂度当做根号n来用,功能强 ...

  5. Linux下挂载指定分区下的某个文件夹到指定目录(mount)

    # 挂载 mount --bind olddir newdir # 卸载 umount newdir 参考: http://www.cnblogs.com/dabaopku/archive/2010/ ...

  6. Jenkins构建完成后通过SVN Publisher Plugin上传文件到指定的SVN(教程收集)

    SVN Publisher Plugin:https://wiki.jenkins-ci.org/display/JENKINS/SVN+Publisher 构建完成后的文件,比如Maven打的war ...

  7. 配置laravel的nginx站点

    server{}配置 server{ #端口配置 listen 80; #域名配置 server_name laravel.cc; index index.php index.html index.h ...

  8. Oracle SOA Suit Adapter

    SOA架构的一个核心的使命是整合企业现存的各式各样的计算资源,它不仅仅是代码层面的整合,更是硬件,计算能力,服务能力的整合.Oracle SOA Suite在这方面做得特别的贴切,它提供了一组Adap ...

  9. Mac -- 安装及使用Docker

    安装这三个软件. 有两个安装包:  和  安装完使用挺简的. 更多内容官网查看: https://docs.docker.com/

  10. TI C66x DSP 四种内存保护问题 -之- CPU訪问corePac内部资源时的内存保护问题

    CPU訪问corePac内部资源(L1.L2)时的内存保护(通过设置内存的訪问权限实现)等问题请參考以下两个blog.已经叙述的非常具体. "TI C66x DSP 系统events及其应用 ...