zoukankan      html  css  js  c++  java
  • java的多生产者多消费者例子

    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();
    }
    }

  • 相关阅读:
    微服务实战(三):深入微服务架构的进程间通信
    微服务实战(二):使用API Gateway
    微服务实战(一):微服务架构的优势与不足
    函数声明与函数表达式
    CSS样式优先级
    iframe框架及优缺点
    JS事件流模型
    JS事件冒泡及阻止
    浏览器重绘与回流
    浏览器渲染与内核
  • 原文地址:https://www.cnblogs.com/ql211lin/p/3975945.html
Copyright © 2011-2022 走看看