生产者消费者模型
四步骤
生产者在仓满时等待,空仓则生产
消费者在仓满时取物,在仓空时等待
生产者在仓空时生产并通知消费者消费
消费者在仓满时取出产品并通知生产者
其实就我个人的认识与理解,生产者与消费者就是对于同一件东西或资源进行操作。生产者生成,消费者对其生成的东西进行消费
这里我给一个简单的生产消费模型:
生产者:
消费者:
我在这只写了一个最简单的模型,生产者在队列为空时生产,不为空时则等待;消费者在队列为空时等待,在队列不为空时的消费。
生产者与消费者模型,我觉得用双缓冲对列实现更为灵活。这里实现双缓冲与线程同步有关,线程同步我会在以后再说的。线程同步的关键字啊:synchronized 。
四步骤
生产者在仓满时等待,空仓则生产
消费者在仓满时取物,在仓空时等待
生产者在仓空时生产并通知消费者消费
消费者在仓满时取出产品并通知生产者
其实就我个人的认识与理解,生产者与消费者就是对于同一件东西或资源进行操作。生产者生成,消费者对其生成的东西进行消费
这里我给一个简单的生产消费模型:
生产者:
public class produce extends Thread{
//声明一个队列对象,用来存储
private LinkedList list ;
int count =0 ;
/**
*构造器
*
*/
public produce(LinkedList list){
this.list = list ;
}
/**
*重写run方法
*/
public void run(){
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized(list){
while(list.size()==0){
//生产产品
Box box = new Box();
box.id = ++count;
box.name = "app"+box.id;
list.add(box);
list.notify();
}
while(list.size()>0){
try {
list.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
消费者:
public class customer extends Thread{
//声明一个队列来存储
private LinkedList list ;
/**
* 构造方法
*/
public customer(LinkedList list){
this.list = list ;
}
public void run(){
while(true){
synchronized (list) {
//判断队列是否为空
while(list.size()==0){
try {
list.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
while(list.size()>0){
System.out.println("消费者拿走了产品!"+ list.getFirst().toString() );
list.remove();
list.notify();
}
}
}
}
}
我在这只写了一个最简单的模型,生产者在队列为空时生产,不为空时则等待;消费者在队列为空时等待,在队列不为空时的消费。
生产者与消费者模型,我觉得用双缓冲对列实现更为灵活。这里实现双缓冲与线程同步有关,线程同步我会在以后再说的。线程同步的关键字啊:synchronized 。