zoukankan      html  css  js  c++  java
  • java多线程问题

    java多线程问题

    synchronized, wait, notify结合 典型场景生产者消费者问题

    package demo;
    
    
    public class Test5 {
        private static final int MAX_PRODUCT = 5;
        private static final int MIN_PRODUCT = 0;
        private static int product = 0;
    
        public synchronized void produce()
        {
            if(Test5.product >= MAX_PRODUCT)
            {
                try
                {
                    System.out.println("产品已满,请稍候再生产");
                    wait();  
    
                }
                catch(InterruptedException e)
                {
                    e.printStackTrace();
                }
                return;
            }
            Test5.product++;
            System.out.println("生产者生产第" + Test5.product + "个产品.");
            notifyAll();   //通知等待区的消费者可以取出产品了
        }
    
        /**
         * 消费者从店员取产品
         */
        public synchronized void consume()
        {
            if(Test5.product <= MIN_PRODUCT)
            {
                try 
                {
                    System.out.println("缺货,稍候再取");
                    wait(); 
                } 
                catch (InterruptedException e) 
                {
                    e.printStackTrace();
                }
                return;
            }
    
            System.out.println("消费者取走了第" + Test5.product + "个产品.");
            Test5.product--;
            notifyAll();   //通知等待去的生产者可以生产产品了
    
        }
    
    
        public static void main(String[] args) {
            Test5 t = new Test5();
            while(true) {
                new Thread(new Runnable() {
    
                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        t.produce();
    
                    }
                }).start();
                new Thread(new Runnable() {
    
                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        t.consume();
                    }
                }).start();
            }
    
        }
    }

    运行效果:

  • 相关阅读:
    登录、注册、忘记密码 流程图
    用心每一天,不忘初心,方能走远
    HttpContext.Current.Request.ServerVariables
    Bootstrap实现弹出框和提示框效果代码
    jquery.each()
    js获取页面url
    jquery获取ul中的第一个li
    sql server 取文件名函数 转载
    jquery手风琴
    给母亲的信
  • 原文地址:https://www.cnblogs.com/lw-20171224/p/13750240.html
Copyright © 2011-2022 走看看