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

  • 相关阅读:
    [转]Ubuntu设置Redhat风格的SHELL提示符PS1属性
    [转]Ubuntu Adsl 上网
    [转]Bash中的PS1详解
    Verilog 关于用task仿真应注意的一个问题
    [转]提高编程技能最有效的方法
    [转]ubuntu 终端常用命令
    [转]VMware Workstation 7.1 正式版 For Linux
    [转]Vim基本操作
    [转]Ubuntu Linux下设置IP的配置命令
    xilinxftp.newlocation
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12076936.html
Copyright © 2011-2022 走看看