码迷,mamicode.com
首页 > 编程语言 > 详细

java的多生产者多消费者例子

时间:2014-09-16 23:28:21      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:io   java   ar   strong   art   on   c   ad   new   

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的多生产者多消费者例子

标签:io   java   ar   strong   art   on   c   ad   new   

原文地址:http://www.cnblogs.com/ql211lin/p/3975945.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!