zoukankan      html  css  js  c++  java
  • java多线程之wait和notify协作,生产者和消费者

    这篇直接贴代码了

    package cn.javaBase.study_thread1;
    
    class Source {
        public static int num = 0; //假设这是馒头的数量
    }
    
    class Producer implements Runnable {
        private Object obj;
        
        public Producer(Object obj) {
            this.obj = obj;
        }
        
        @Override
        public void run() {
            synchronized (obj) {
                while (true) {
                    if (Source.num >= 6) { //馒头的数量>=6个的时候,就停下来不生产了,通知别人来消费
                        obj.notify();
                        System.out.println("满了,消费吧");
                        try {
                            obj.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    
                    Source.num++;
                    System.out.println("已经生产了:"+ Source.num + "个");
                }
            }
        }
    }
    
    class Consumer implements Runnable{
        private Object obj;
        
        public Consumer(Object obj) {
            this.obj = obj;
        }
    
        @Override
        public void run() {
            synchronized (obj) {
                while (true) {
                    if (Source.num == 0) {  //馒头的数量==0个的时候,就停下不消费了,通知别人该生产了
                        obj.notify();
                        System.out.println("没了,生产吧。");
                        try {
                            obj.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    
                    Source.num--;
                    System.out.println("剩下了:"+ Source.num + "个");
                }
            }
        }
    }
    
    public class MyProducerConsumer {
    
        public static void main(String[] args) throws InterruptedException {
            Object a = new Object();
            
            Producer p = new Producer(a);
            Consumer c = new Consumer(a);
            
            new Thread(p).start();
            Thread.sleep(200);  //为了保证先生产,再消费, 不用也可以
            new Thread(c).start();
            
        }
    }

    因为思想跟上一篇的Java多线程之wait和notify:http://www.cnblogs.com/WNof11020520/p/8780875.html

    讲的差不多,所以在这里就不累赘了。

  • 相关阅读:
    Vivado Non-Project Flow
    使用ngspice进行电路仿真
    Synopsys DC综合脚本示例
    解决Vivado XSDK在Ubuntu系统上自带UART Terminal Crash问题
    Ubuntu-18.04 LTS UEFI 安装U盘制作
    嵌入式处理器通过UART实现scanf和printf
    用于RISC-V的Makefile示例
    利用SSH隧道技术穿越内网访问远程设备
    C++基础-多态
    C++基础-继承
  • 原文地址:https://www.cnblogs.com/WNof11020520/p/8794047.html
Copyright © 2011-2022 走看看