生产/消费模型的java实现
2013-02-10 19:14
399 查看
生产者消费者模型,其实就是一个(生产者)负责产生数据,另一个(消费者)负责使用数据,这里的数据就是生产者和消费者共用的资源,为了让生产者和消费者能有序地使用公共资源,需要引入锁(synchronized)的概念----在一段代码中,将那一段需要很多线程共同使用的代码(相当于共享资源)用synchronized关键字定义,相当于给这一段区域进行了加锁,当有线程来操作它时,就会对其加锁,其他的线程在此时若准备操作它只能排队等待,等第一个线程操作完成,锁解除之后,才能操作。
下面实现的生产消费模型主要是:
1.仓库中无产品时,生产者开始生产一件放入仓库,通知消费者来取;
2.消费者从仓库中取出产品后,仓库没有库存,通知生产者去继续生产。
3.生产者和消费者是两个互不干扰的线程,但是又有一定的联系,联系就是通过仓库这个被锁定的区域实现的。
4.wait()和notify()方法就是生产者和消费者线程之间的联系,当一方在使用公共资源时,另一方的状态为wait,当这一方使用公共资源完毕后,会notify(通知)等待的一方。
生产者代码:
Java代码
![](http://ronaldoly.iteye.com/images/icon_copy.gif)
![](http://ronaldoly.iteye.com/images/icon_star.png)
![](http://ronaldoly.iteye.com/images/spinner.gif)
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+"号产品-------生产者线程");
}
}
}
}
}
下面实现的生产消费模型主要是:
1.仓库中无产品时,生产者开始生产一件放入仓库,通知消费者来取;
2.消费者从仓库中取出产品后,仓库没有库存,通知生产者去继续生产。
3.生产者和消费者是两个互不干扰的线程,但是又有一定的联系,联系就是通过仓库这个被锁定的区域实现的。
4.wait()和notify()方法就是生产者和消费者线程之间的联系,当一方在使用公共资源时,另一方的状态为wait,当这一方使用公共资源完毕后,会notify(通知)等待的一方。
生产者代码:
Java代码
![](http://ronaldoly.iteye.com/images/icon_copy.gif)
![](http://ronaldoly.iteye.com/images/icon_star.png)
![](http://ronaldoly.iteye.com/images/spinner.gif)
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+"号产品-------生产者线程");
}
}
}
}
}
相关文章推荐
- 生产/消费模型的java实现
- 生产/消费模型的java实现
- JAVA 多线程制作大球吃小球 一、实现球的自动生成及运动 生产消费模型
- Kafka 使用Java实现数据的生产和消费demo
- Linux下的简单生产、消费模型的实现(上)
- Linux下的简单生产、消费模型的实现(下)
- Java 多进程的生产和消费实现
- 阻塞队列实现--生产消费模型
- 线程并发集合实现java生成消费模型(ArrayBlockingQueue和ConcurrentMap)
- Kafka 使用Java实现数据的生产和消费demo
- Java 多线程拷贝文件夹并调用tinyPng算法接口压缩图片实现(生产消费变种)
- Java学习札记之线程模型——生产消费模型
- JAVA实现生产消费者模型
- 【JAVA】wait和notify用法,附生产/消费模型
- 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法 在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列(先进先出)。
- wait/notify实现生产消费模型
- java中使用阻塞队列实现生产这与消费这之间的关系
- 用java实现生产和消费
- Wait, notify实现的生产消费模型
- java中多线程模拟(多生产,多消费,Lock实现同步锁,替代synchronized同步代码块)