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

  • 相关阅读:
    Oracle中的substr()函数详解案例
    servlet中通过getWriter()获取out返回给浏览器出现中文乱码问题
    linux系统644、755、777权限详解
    bootstrap select多选
    $(window).on("load",function(){} 和 $(document).ready(function() {}
    bootstrap 鼠标悬停显示
    redis 常用操作
    SpringMVC 集成redis
    linux安装redis-3.0.7
    mysql 外键的几种约束
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12076936.html
Copyright © 2011-2022 走看看