线程进水与出水问题实现

问题:有一个水池,水池的容量是固定 的20L,一边为进水口,一边为出水口.要求,进水与放水不能同时进行.

水池一旦满了不能继续注水,一旦放空了,不可以继续放水. 进水的速度5L/s , 放水的速度2L/s

分析:创建2个线程,一个进水,一个用于放水。这里以秒为单位,进水每次进5L,放水每次放2L

如果当前水量小于2L,则不能放水。如果当前水量大于15L,则不能加水。

具体实现如下:

package com.dongbin.thread;

//容量
class Water{
    private double total = 0;

    public double getTotal() {
        return total;
    }

    public void setTotal(double total) {
        this.total = total;
    }

}

//进水
class InputWater extends Thread{

    private Water water;

    public InputWater(Water water) {
        this.water = water;
    }

    @Override
    public void run() {

        while (true) {
            synchronized (water) {
                if (water.getTotal() <= 15) {
                    // 进水 按秒进
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    water.setTotal(water.getTotal() + 5);
                    System.out.println(Thread.currentThread().getName()
                            + ": 进水5L,目前水量" + water.getTotal() + "L!!!");
                    water.notify();// 唤醒放水线程
                } else {
                    System.out.println(Thread.currentThread().getName()
                            + ": 不能再加水了!!! ");
                    try {
                        water.wait();// 进水线程等待
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }

        }
    }
}

//放水
class OutWater extends Thread{
    private Water water;

    public OutWater(Water water) {
        this.water = water;
    }

    @Override
    public void run() {

        while (true) {
            synchronized (water) {
                if (water.getTotal() >= 2) {
                    // 放水
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    water.setTotal(water.getTotal() - 2);
                    System.out.println(Thread.currentThread().getName()
                            + ": 放水2L,目前水量" + water.getTotal() + "L");
                    water.notify();// 唤醒进水线程
                } else {
                    // 等待加水
                    System.out.println(Thread.currentThread().getName()
                            + ":不能放水了!!! ");
                    try {
                        water.wait();// 放水线程等待
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}
public class Test {

    public static void main(String[] args) {
        Water water = new Water();
        InputWater inputWater = new InputWater(water);
        inputWater.setName("进水线程");

        OutWater outWater = new OutWater(water);
        outWater.setName("放水线程");

        //启动线程

        inputWater.start();
        outWater.start();

    }

}

结果:

  

时间: 2024-08-03 21:13:58

线程进水与出水问题实现的相关文章

水池进水和出水两个线程问题

问题描述: 有一个水池,水池的容量是固定 的500L,一边为进水口,一边为出水口.要求,进水与放水不能同时进行. 水池一旦满了不能继续注水,一旦放空了,不可以继续放水. 进水的速度5L/s , 放水的速度2L/s 这是一个多线程问题 1 /* 2 作业1:有一个水池,水池的容量是固定 的500L,一边为进水口,一边为出水口.要求,进水与放水不能同时进行. 3 水池一旦满了不能继续注水,一旦放空了,不可以继续放水. 进水的速度5L/s , 放水的速度2L/s 4 */ 5 6 class Pool

洗衣机一边进水一边出水 更换排水阀皮碗

事件起因于请维修洗衣机的,家里的那台洗衣机坏过一次,在赶集上找了个维修的,结果别人来2分钟换了个排水阀皮碗就搞定了,收了160大洋.后来我在淘宝上查了那个皮碗的价格0.98元.感觉维修行业乱收费太严重了. 今天那台洗衣机又罢工了,然后在赶集上找了两家,一开口就200大洋,而且态度相当恶劣.“那你自己换上去吧”.老夫怒了,自己摸索终于搞好了,具体原因是由于排水阀又污物,清理下皮碗就可以了.给各位猿分享下,有动手能力的可以自己实践下,说不定就可以避免挨宰和受气了. 上图:先看正面图 找准排水阀,把钢

水池进水与放水问题(多线程应用)

package demo2; class Pooll {  /**1:有一个水池,水池的容量是固定 的500L,一边为进水口,一边为出水口.     * 要求,进水与放水不能同时进行.     水池一旦满了不能继续注水,一旦放空了,不可以继续放水. 进水的速度5L/s ,       放水的速度2L/s       * @param args     */ int capacity = 0;     }          //进水class Feedwater  extends Thread{

北京苹果iphone维修店在哪里iphone5s进水不开机维修多少钱

为什么网上的价格差距这么大?为什么打电话问的商家报的价格都不一样?哪种几百块钱的屏幕(芯片)能相信吗?淘宝上面的屏幕(芯片)能相信吗?哪里能找到原装的屏幕呢?哪里的维修点才靠谱呢?北京中关村和深圳那边的维修市场能相信吗?     电子城报的二三百能相信吗?原装的配件和仿的价钱相差多少呢?       当您看到了这里,请您选择飞维智能科技有限责任公司(我们用最真挚的态度来为您服务)   我们在保证质量的前提下用最低的价格来为广大客户服务.我们的原则是(少花钱,买放心,保质量,求口碑)   工程师:

耳道进水易致外耳炎_耳朵进水滴点硼酸酒精

如果直接侧身入水,注意跳水的姿势,所以,会使耳朵直接受水拍击,2.并且动作稍微快一点.跳水要保证正面入水,鼓膜则容易裂开.穿孔. 耳朵入水滴点硼酸酒精 一般不会有问题.结果弄穿耳膜,陈锡辉认为,所以,只要控制用力不要太猛,令听力神经受损的情况.伸入别太深,针对曾有香港人用棉花棒吸水,你在操作时一定得温柔. 的人也不宜下水.把耳膜切开放置过塑料管 ●曾做过耳部手术, 而又有鼻塞症状的人,●一般游泳池水温与外界的温差都比较大,下水会使感冒加重,诱发中耳炎.患有严重感冒, 所有耳部疾病在治疗期间应避免

耳道进水易致外耳炎1耳朵进水滴点硼酸酒精

造成听力下降.1.否则泡涨后容易引起疼痛发炎,游泳前,把耳朵内的耵聍(耳屎)取出,甚至把耳道堵塞, 棉花纸巾不防水 症状病因 当然,防止水进入耳朵.你也可以选购游泳用耳塞,如果耳塞太硬,游泳中容易脱落.真有点困难.耳塞不是按照你的耳道设计的,但要找到合适的耳塞,同样会引起耳朵疼痛.所以使用起来并不方便.如果耳塞太小, 可以最大限度减少游泳对耳部伤害.稍微做些简单的准备工作,其实, 把耳膜切开放置过塑料管的人也不宜下水.●曾做过耳部手术, 如果不及时处理,而游泳池水含有大量细菌,游泳时很难避免耳朵

我的苹果5S进水了维修一下的话要多少钱啊(苹果认证)

为什么网上的价格差距这么大?为什么打电话问的商家报的价格都不一样?哪种几百块钱的屏幕(芯片)能相信吗?淘宝上面的屏幕(芯片)能相信吗?哪里能找到原装的屏幕呢?哪里的维修点才靠谱呢?北京中关村和深圳那边的维修市场能相信吗? 电子城报的二三百能相信吗?原装的配件和仿的价钱相差多少呢? 当您看到了这里,请您选择飞维智能科技有限责任公司(我们用最真挚的态度来为您服务) 我们在保证质量的前提下用最低的价格来为广大客户服务.我们的原则是(少花钱,买放心,保质量,求口碑) 工程师:罗飞报修热线:158 110

苹果爱疯5手机掉马桶了捞起来不开机还能用吗iPhone5进水开不开机维修主板要多少钱

http://tieba.baidu.com/p/2089457582(复制链接点击进入查看中关村黑心商家) 或者直接搜索百度贴吧[中关村]进入查看中关村黑心商家 中关村一直以低价吸引人,拆机之后,在以高价格卖出.你在电话里面询问价格,他会给你报100-200,你去了手机一拆,再给你说一个价格,你不修,最后有可能连主板都给你掉包. ========找好技术?上飞维科技有限责任公司. (飞维智能科技)自成立以来深受业界好评,服务好.--------电话里面的价格已优惠-------不二价-----

iPhone5s进水维修多少钱苹果5s进水了修一下多少钱国行5s进水了在保修期内更换新机多少钱

为什么网上的价格差距这么大?为什么打电话问的商家报的价格都不一样?哪种几百块钱的屏幕(芯片)能相信吗?淘宝上面的屏幕(芯片)能相信吗?哪里能找到原装的屏幕呢?哪里的维修点才靠谱呢?北京中关村和深圳那边的维修市场能相信吗? 电子城报的二三百能相信吗?原装的配件和仿的价钱相差多少呢? 当您看到了这里,请您选择飞维智能科技有限责任公司(我们用最真挚的态度来为您服务) 我们在保证质量的前提下用最低的价格来为广大客户服务.我们的原则是(少花钱,买放心,保质量,求口碑) 工程师:罗飞报修热线:158 110