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

  • 相关阅读:
    python---自定义分页类
    python---正则中的(?P<name>group)
    学习windows编程 day6 之模拟记事本
    学习windows编程 day5 之按键消息
    some websit
    android/iphone/windows/linux声波通讯库
    无线点餐系统
    android实现弧形进度表盘效果
    与Sevice实现双向通信
    android code bbs for developer
  • 原文地址:https://www.cnblogs.com/ql211lin/p/3975945.html
Copyright © 2020-2023  润新知