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();
            }
        }
    }
  • 相关阅读:
    SQL Server中怎样可以从SELECT语句的结果集中删除重复行
    Comparison method violates its general contract!
    如何解决 不能以 DISTINCT 方式选择 text、ntext 或 image 数据类型
    TortoiseSVN—Repo-browser
    使用BigDecimal完成小数点后的精确位数的四舍五入
    CREATE TABLE 语句后的 ON [PRIMARY] 起什么作用
    sql server 获取每一个类别中值最大的一条数据
    C# 正则表达式
    Linq to XML 读取XML 备忘笔记
    安装双系统需要注意的几个问题
  • 原文地址:https://www.cnblogs.com/blknemo/p/10020240.html
Copyright © 2011-2022 走看看