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

源代码:


class Computer{    //定义Computer类
    private String name;
    private int i=0;              //计算台数
    private  boolean flag=false;   //设置标志位,true为生产,false为取走

    public synchronized  void set(String name){     //设置信息,即生产
        if(!flag){                 //当标志位为false时,不可以生产
            try{
                super.wait();        //等待搬走
            }catch (InterruptedException e){
                e.printStackTrace();
            }
        }
        setName(name);
        try{
            Thread.sleep(100);  //加入延迟
        }catch (InterruptedException e){
            e.printStackTrace();
        }
        i++;         //生产台数+1
        System.out.println("生产了第"+i+"台计算机:"+this.getName());

        flag=false;     //修改标志位,false表示可以搬走,不可以生产
        super.notify();   //唤醒等待进程


    }
    public  synchronized void get(){   //取得信息,即搬走
        if(flag){                      //标志位为true,不可以取走
            try{
                super.wait();             //等待生产
            }catch (InterruptedException e){
                e.printStackTrace();
            }
        }
        try{
            Thread.sleep(100);        //加入延迟
        }catch (InterruptedException e){
            e.printStackTrace();
        }
        if(this.getName()!=null){    //生产出了计算机
        System.out.println("搬走了"+this.getName()+"计算机");
        }
        flag=true;        //修改标志位为true,表示可以生产
        super.notify();   //唤醒等待进程
    }

    public void setName(String name){
        this.name=name;
    }

    public String getName() {
        return name;
    }
}


class  Producer implements  Runnable{    //定义生产进程
   private Computer com=null;//保存Computer引用
    public  Producer(Computer com){ //通过构造方法设置Computer属性内容
        this.com=com;//为Computer 属性初始化
    }

    public void run() {//覆写run()方法
        for (int i = 0; i < 20; i++) {
            if (i % 2 == 0) {
                this.com.set("华硕");
            } else {
                this.com.set("戴尔");
            }

        }
    }
}
class Consumer implements  Runnable{  //定义取走线程
    private  Computer com=null;      //保存Computer引用
    public Consumer(Computer com){    //通过构造方法设置Computer属性内容
        this.com=com;                  //为Computer 属性初始化
    }

    public void run() {               //覆写run()方法
        for(int i=0;i<21;i++) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            this.com.get();

        }
    }
}



public class day01 {

    public static void main(String[] args) throws Exception {


        Computer c=new Computer();    //实例化Computer类
        Producer pro=new Producer(c);   //实例化生产类,传递Computer引用
        Consumer con=new Consumer(c);   //实例化取走类,传递Computer引用
        new Thread(pro).start();        //启动生产线程
        new Thread(con).start();          //启动取走线程

    }

}


运行结果:

生产了第1台计算机:华硕
搬走了华硕计算机
生产了第2台计算机:戴尔
搬走了戴尔计算机
生产了第3台计算机:华硕
搬走了华硕计算机
生产了第4台计算机:戴尔
搬走了戴尔计算机
生产了第5台计算机:华硕
搬走了华硕计算机
生产了第6台计算机:戴尔
搬走了戴尔计算机
生产了第7台计算机:华硕
搬走了华硕计算机
生产了第8台计算机:戴尔
搬走了戴尔计算机
生产了第9台计算机:华硕
搬走了华硕计算机
生产了第10台计算机:戴尔
搬走了戴尔计算机
生产了第11台计算机:华硕
搬走了华硕计算机
生产了第12台计算机:戴尔
搬走了戴尔计算机
生产了第13台计算机:华硕
搬走了华硕计算机
生产了第14台计算机:戴尔
搬走了戴尔计算机
生产了第15台计算机:华硕
搬走了华硕计算机
生产了第16台计算机:戴尔
搬走了戴尔计算机
生产了第17台计算机:华硕
搬走了华硕计算机
生产了第18台计算机:戴尔
搬走了戴尔计算机
生产了第19台计算机:华硕
搬走了华硕计算机
生产了第20台计算机:戴尔
搬走了戴尔计算机
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值