zoukankan      html  css  js  c++  java
  • 【Java】生产者消费者模式

    设计一个生产电脑和搬运电脑类,要求生产出一台电脑就搬走一台电脑,如果没有新的电脑生产出来,则搬运工要等待新电脑产出;如果生产出的电脑没有搬走,则要等待电脑搬走之后再生产,并统计出生产的电脑数量。

    package chapter9;
    
    public class Job2 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Computer c = new Computer();
            Producer pro = new Producer(c);
            Carrier car = new Carrier(c);
            new Thread(pro).start();
            new Thread(car).start();
            
        }
    
    }
    
    class Computer
    {
        private String name = "dell";
        private String version = "1";
        private static int num = 1;
        public static int getNum() {
            return num;
        }
    
        public static void setNum(int num) {
            Computer.num = num;
        }
        private boolean flag = false;
        
        public String getVersion() {
            return version;
        }
    
        public void setVersion(String version) {
            this.version = version;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public synchronized void set(String name,String version)
        {
            if(!flag)
            {
                try {
                    super.wait();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            this.setName(name);
            try {
                Thread.sleep(300);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            this.setVersion(version);
            this.setNum(num+1);
            flag = false;
            super.notify();
        }
        public synchronized void get()
        {
            if(flag)
            {
                try {
                    super.wait();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
                try {
                    Thread.sleep(300);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.println(this.getName()+"-->"+this.getVersion()+"-->"+Computer.getNum());
                flag=true;
                super.notify();
            
        }
    }
    
    class Producer implements Runnable
    {
        private Computer c = null;
    
        public Producer(Computer c) {
            //super();
            this.c = c;
        }
        public void run()
        {
            boolean flag=false;
            for(int i = 0; i < 50; i++)
            {
                if(flag)
                {
                    this.c.set("dell","1");
                    flag = false;
                }
                else
                {
                    this.c.set("hp","2");
                    flag = true;
                }
            }
        }
    }
    
    class Carrier implements Runnable
    {
        private Computer c = null;
    
        
        
        public Carrier(Computer c) {
            //super();
            this.c = c;
        }
    
    
    
        public void run()
        {
            for (int i = 0; i < 50; i++) {
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                this.c.get();
            }
        }
    }
  • 相关阅读:
    转】用Maven构建Mahout项目
    转】Mahout学习路线图
    转】Spark DataFrames入门指南:创建和操作DataFrame
    转】Spark DataFrame小试牛刀
    转】用Maven构建Hadoop项目
    【转】Hive导入10G数据的测试
    软考概述
    vi 按了ctrl+s之后
    VC6.0入门使用
    后台使用oracle前台使用easyui分页机制
  • 原文地址:https://www.cnblogs.com/blknemo/p/10020240.html
Copyright © 2011-2022 走看看