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

  • 相关阅读:
    Docker之设置加速器
    Nginx之美多商城前台部署
    Nginx之负载均衡
    Nginx之反向代理
    美多商城后台MIS系统部署之Nginx配置
    Nginx之server和location配置使用
    题解 P4721 【【模板】分治 FFT】
    题解 P3338 【[ZJOI2014]力】
    题解 CHSEQ22 【Chef and Favourite Sequence】
    题解 CF813F 【Bipartite Checking】
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12076936.html
Copyright © 2011-2022 走看看