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

问题描述:

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

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

这是一个多线程问题

 1 /*
 2  作业1:有一个水池,水池的容量是固定 的500L,一边为进水口,一边为出水口.要求,进水与放水不能同时进行.
 3  水池一旦满了不能继续注水,一旦放空了,不可以继续放水. 进水的速度5L/s ,  放水的速度2L/s
 4  */
 5
 6 class Pool {
 7
 8     int capacity = 0;
 9
10 }
11
12 class Inlet extends Thread {
13
14     Pool p;
15
16     public Inlet(Pool p) {
17         this.p = p;
18     }
19
20     @Override
21     public void run() {
22         while(true){
23             synchronized (p) {
24                 if((p.capacity + 5) <= 500){
25                     System.out.println("进水中,水池容量为:"+(p.capacity + 5));
26                     p.capacity += 5;
27                     p.notify();
28                 }else{
29                     System.out.println("水池水满了");
30                     try {
31                         p.wait();
32                     } catch (InterruptedException e) {
33                         e.printStackTrace();
34                     }
35                 }
36             }
37         }
38     }
39
40 }
41
42 // 出水
43 class Outlet extends Thread {
44
45     Pool p;
46
47     public Outlet(Pool p) {
48         this.p = p;
49     }
50
51     @Override
52     public void run() {
53
54         while(true){
55             synchronized (p) {
56                 if((p.capacity - 2) >= 0){
57                     System.out.println("水池出水中,水池容量为:"+(p.capacity - 2));
58                     p.capacity -= 2;
59                     p.notify();
60                 }else{
61                     System.out.println("水池没水了");
62                     try {
63                         p.wait();
64                     } catch (InterruptedException e) {
65                         e.printStackTrace();
66                     }
67                 }
68             }
69         }
70     }
71
72 }
73
74 public class Zuoye1 {
75
76     public static void main(String[] args) {
77         Pool p = new Pool();
78         Inlet in = new Inlet(p);
79         Outlet out = new Outlet(p);
80         in.start();
81         out.start();
82
83     }
84
85 }
时间: 2024-10-24 23:36:36

水池进水和出水两个线程问题的相关文章

线程进水与出水问题实现

问题:有一个水池,水池的容量是固定 的20L,一边为进水口,一边为出水口.要求,进水与放水不能同时进行. 水池一旦满了不能继续注水,一旦放空了,不可以继续放水. 进水的速度5L/s , 放水的速度2L/s 分析:创建2个线程,一个进水,一个用于放水.这里以秒为单位,进水每次进5L,放水每次放2L 如果当前水量小于2L,则不能放水.如果当前水量大于15L,则不能加水. 具体实现如下: package com.dongbin.thread; //容量 class Water{ private dou

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

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

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

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

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

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

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

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

质问 SMT 团队, 脑袋进水了吗?

这么晚了(1点半了), 我还在这敲键盘. 我家老板带着女儿,今天的车票回娘家, 要在家办公, 昨天晚上说订单同步不了, 这TM真是急时雨啊! 前天(15号)晚上9点差不多, 我还在同步, 卵问题没有. 打开源码调试了一下, 说是 invalid signature , 无效的签名. 签名在 SMT 的 API 里总共就两地方使用: 1, 获取授权码, 即登陆后返回的授权码. 2, 调用 API 时, 要做为参数. 登陆/获取授权码, 获取 refresh_token 都没有任何问题. 检查了一圈

iPhone5S进水返厂维修多少钱售后换主板换新机5S进水里不开机维修多少钱(推荐维修)

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

java 简单的进水放水

class Shui implements Runnable{     int a=0;    @Override        public void run() {        synchronized (this) {        while (true) {        String str= Thread.currentThread().getName();                                if (str.equals("进水")) {  

创建两个线程模拟火车站两个窗口售票程序

题目:创建两个线程模拟火车站两个窗口售票程序,窗口售票时间为1秒,两个窗口不能同时售票 #include<Windows.h> #include<iostream> using namespace std; //这是2个线程模拟买火车票的小程序 DWORD WINAPI Fun1Proc(LPVOID lpParameter);//thread data DWORD WINAPI Fun2Proc(LPVOID lpParameter);//thread data int inde