java吧 关注:1,303,703贴子:12,859,924
  • 6回复贴,共1

传智播客一道线程相关的题,求帮助

只看楼主收藏回复

要求是这个,作业1:有一个水池,水池的容量是固定 的500L,一边为进水口,一边为出水口.要求,进水与放水不能同时进行,水池一旦满了不能继续注水,一旦放空了,不可以继续放水. 进水的速度5L/s , 放水的速度2L/s
class Pool{
int capacity = 500;
int now = 0;
boolean flag = false; //水池空
}
class RetainWater extends Thread{
Pool p;
int inlet = 5;
public RetainWater(Pool p){
this.p = p;
}
public void run(){
while(true){
synchronized (p) {
if(p.flag == false){
if((p.now+inlet)<p.capacity){
p.now+=inlet;
System.out.println(p.now);
}else{
System.out.println("水池已经蓄满");
}
p.flag = true;
p.notify();
}else{
try {
p.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
class OutWater extends Thread{
Pool p;
int outlet = 2;
public OutWater(Pool p){
this.p = p;
}
public void run(){
while(true){
synchronized (p) {
if(p.flag == true){
if((p.capacity-outlet)>0){
p.capacity-=outlet;
System.out.println(p.capacity);
}else{
System.out.println("水池的水已经放空");
}
p.flag = false;
p.notify();
}else{try {
p.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
public class Demo7 {
public static void main(String[] args) {
Pool a = new Pool();
RetainWater retainWater = new RetainWater(a);
OutWater outWater = new OutWater(a);
retainWater.start();
outWater.start();
}
}
这是我自己写的,可能比较蠢,见笑了,不知道出什么问题。输出结果是这样,
水池的水已经放空
水池已经蓄满
水池的水已经放空
水池已经蓄满
那就是我if里面的判断语句有问题?


1楼2016-08-22 00:20回复
    多生产多消费的问题,百度一下有模板,你理解一下按着套就可以了


    IP属地:上海来自Android客户端2楼2016-08-22 00:33
    回复
      2026-05-30 22:36:42
      广告
      不感兴趣
      开通SVIP免广告
      游手好闲的人最没有空闲。


      IP属地:江苏来自iPhone客户端3楼2016-08-22 00:33
      回复
        你要把水减少与增加的过程打印出来啊,


        IP属地:四川来自Android客户端6楼2016-08-22 06:43
        回复
          为什么水池的水位不是从零开始的呢


          9楼2017-07-06 18:45
          回复