• 【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();
            }
        }
    }
  • 相关阅读:
    关于Java 拷贝数组方法 Arrays.copyOf() 是地址传递还是值传递
    n皇后问题
    子集
    排列
    矩阵翻转
    删除集合元素的方法
    Java最大值与最小值
    Spring Security +Oauth2 +Spring boot 动态定义权限
    VirtualBox Centos7虚拟机集群配置
    VirtualBox使用Centos7与主机共享文件夹
  • 原文地址:https://www.cnblogs.com/blknemo/p/10020240.html
Copyright © 2020-2023  润新知