ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java之生产者和消费者问题

2019-12-21 15:00:56  阅读:192  来源: 互联网

标签:库存 java 消费者 生产者 数为 产品 生产 public productNum


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,消费者,生产者,数为,产品,生产,public,productNum
来源: https://www.cnblogs.com/xiximayou/p/12076936.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有