首页 > 编程语言 > 详细

java之生产者和消费者问题

时间:2019-12-21 16:18:22      阅读:77      评论:0      收藏:0      [点我收藏+]
package testThread;

public class Test3 {
    public static void main(String[] args) {
        Clerk c = new Clerk();
        //消费时不生产,生产时不消费
        //生产者
        new Thread(new Runnable() {    
            @Override
            public void run() {
                // TODO Auto-generated method stub
                synchronized (c) {
                    //无限生产
                    while(true) {
                        if(c.productNum == 0) {
                            //开始生产
                            System.out.println("产品为0,开始生产");
                            while(c.productNum<4) {
                                c.productNum++;
                                System.out.println("产品库存:"+c.productNum);
                            }
                            System.out.println("产品数为:"+c.productNum+",结束生产");
                            //唤醒消费者
                            c.notify();
                        }else {
                            try {
                                //生产者等待
                                c.wait();
                            } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                    }
                }
                
            }
        },"生产者").start();
        //消费者
        new Thread(new Runnable() {    
            @Override
            public void run() {
                // TODO Auto-generated method stub
                synchronized (c) {
                    while(true) {
                        if(c.productNum == 4) {
                            System.out.println("库存为4,开始消费");
                            while(c.productNum>0) {
                                c.productNum--;
                                System.out.println("产品库存:"+c.productNum);
                            }
                            System.out.println("产品数为:"+c.productNum+",结束消费");
                            //唤醒生产者
                            c.notify();
                        }else {
                            try {
                                //消费者等待
                                c.wait();
                            } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                    }
                }
                
            }
        },"消费者").start();
    }
}
class Clerk{
    public static int productNum = 0;
}

部分输出:

产品为0,开始生产
产品库存:1
产品库存:2
产品库存:3
产品库存:4
产品数为:4,结束生产
库存为4,开始消费
产品库存:3
产品库存:2
产品库存:1
产品库存:0
产品数为:0,结束消费
产品为0,开始生产
产品库存:1
产品库存:2
产品库存:3
产品库存:4
产品数为:4,结束生产

java之生产者和消费者问题

原文:https://www.cnblogs.com/xiximayou/p/12076936.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!