Java多线程实现简单生产者消费者模式

来源:互联网 发布:网络舆情公司排名 编辑:程序博客网 时间:2024/05/29 04:03
生产者消费者模式

一种重要的模式,基于等待/通知机制。生产者/消费者模式描述的是有一块缓冲区作为仓库,生产者可将产品放入仓库,消费者可以从仓库中取出产品,生产者/消费者模式关注的是以下几个点:

1、生产者生产的时候消费者不能消费

2、消费者消费的时候生产者不能生产

3、缓冲区空时消费者不能消费

4、缓冲区满时生产者不能生产

代码实例:

public class LockPattern_A {static int food=10;//设定开始食物储量Lock lock;Condition condition;public LockPattern_A(Lock lock,Condition condition) {// TODO Auto-generated constructor stubthis.condition=condition;this.lock=lock;}/*生产者*/public void producer() {try {while(food>0) {lock.lock();/*当食物储量超过30时就唤醒消费者线程,进行消费*/if (food>30) {System.out.println("过剩,需要消费");condition.await();}System.out.println("食物不够,增加食物");System.out.println("当前食物储量"+food);food+=10;//生产者每次增加10个食物condition.signal();}} catch (InterruptedException e) {e.printStackTrace();} finally {lock.unlock();}}/*消费者*/public void consume() {try {while(food>=5) {lock.lock();/*当食物少于5个时就唤醒生产者线程进行生产*/if (food<=5) {System.out.println("食物不够,需要生产");condition.await();}System.out.println("消费食物");System.out.println("当前食物储量"+food);food-=5;//每次消费5个食物condition.signal();}} catch (InterruptedException e) {e.printStackTrace(); } finally { lock.unlock();}}public static void main(String[] args) {Lock lock = new ReentrantLock();Condition condition = lock.newCondition();final LockPattern_A a = new LockPattern_A(lock, condition);/*生产者线程*/Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stuba.producer();}});/*消费者线程*/Thread t2 = new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stuba.consume();}});t1.start();t2.start();}}


0 0