您的位置:首页 > 编程语言 > Java开发

生产/消费模型的java实现

2013-02-10 19:14 399 查看
生产者消费者模型,其实就是一个(生产者)负责产生数据,另一个(消费者)负责使用数据,这里的数据就是生产者和消费者共用的资源,为了让生产者和消费者能有序地使用公共资源,需要引入锁(synchronized)的概念----在一段代码中,将那一段需要很多线程共同使用的代码(相当于共享资源)用synchronized关键字定义,相当于给这一段区域进行了加锁,当有线程来操作它时,就会对其加锁,其他的线程在此时若准备操作它只能排队等待,等第一个线程操作完成,锁解除之后,才能操作。

下面实现的生产消费模型主要是:

1.仓库中无产品时,生产者开始生产一件放入仓库,通知消费者来取;

2.消费者从仓库中取出产品后,仓库没有库存,通知生产者去继续生产。

3.生产者和消费者是两个互不干扰的线程,但是又有一定的联系,联系就是通过仓库这个被锁定的区域实现的。

4.wait()和notify()方法就是生产者和消费者线程之间的联系,当一方在使用公共资源时,另一方的状态为wait,当这一方使用公共资源完毕后,会notify(通知)等待的一方。

生产者代码:

Java代码







package Producer_customer0123;

import java.util.List;

public class ProducerThread
extends Thread {

private List<Things> thingslist;//产品队列

int count=0;

public ProducerThread(List<Things> thingslist){
this.thingslist=thingslist;
}
public void run(){
while(true){
//休眠2秒
try {
Thread.sleep(2000);
} catch (InterruptedException e1) {

e1.printStackTrace();
}

synchronized (thingslist) {
while(thingslist.size()>0){//如果有产品,则等待

try {
thingslist.wait();

System.out.println("生产者在等待-------生产者线程");

} catch (InterruptedException e) {
e.printStackTrace();
}
}
while(thingslist.size()==0){//如果没有产品,则生产产品,并且通知消费者

Things newthing=new Things();
count++;
newthing.id=count;
newthing.name="第"+count+"个产品";

thingslist.add(newthing);//加入到队列中

thingslist.notify();//通知消费者
System.out.println("生产者生产了"+count+"号产品-------生产者线程");

}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: