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();
            }
    
        }
    }

    运行效果:

  • 相关阅读:
    面试题
    Struts2与Struts1的对比
    【转载】在Linux平台上安装和配置Ruby on Rails详解
    SVN总结
    Web.config文件例子详解
    Web.config文件简介
    在C#中应用哈希表(Hashtable)
    VS2005调试C++
    [Serializable]C#中的对象序列化
    ASP.NET下载文件(弹出打开保存文件对话框)
  • 原文地址:https://www.cnblogs.com/lw-20171224/p/13750240.html
Copyright © 2011-2022 走看看