zoukankan      html  css  js  c++  java
  • java之生产者和消费者问题

    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,结束生产

  • 相关阅读:
    iOS应用崩溃日志分析
    使用Crashlytics来保存应用崩溃信息
    Mac和iOS开发资源汇总
    简单配置PonyDebugger
    程序员的工作不能用“生产效率”这个词来衡量
    使用Reveal 调试iOS应用程序
    MySQL 笔记
    flex弹性布局
    回调函数
    微信小程序开发
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12076936.html
Copyright © 2011-2022 走看看