java吧 关注:1,258,900贴子:12,752,343
  • 14回复贴,共1

求大神帮忙 多线程题目

只看楼主收藏回复

一个蓄水池,容纳10000吨水,有三个注水口和一个排水口,每个注水口没小时注水15吨,排水口每小时排水8吨,多用线程模拟,测算注水口和排水口全开的情况下,多久注满水池?
小弟初涉JAVA,刚学习到多线程,希望大神指点小弟


IP属地:天津1楼2017-07-07 09:45回复
    大神们~~~~~~~~~~~~·


    IP属地:天津2楼2017-07-07 09:52
    收起回复
      2025-05-10 22:29:10
      广告
      就是三个线程类,操作一个static,一个每隔10秒(时间随意)加15,一个减8,第三个线程检测static大于10000了吗,大于10000就结束。基本思路就这样


      IP属地:上海3楼2017-07-07 10:32
      收起回复
        大神求程序啊


        IP属地:天津4楼2017-07-07 13:33
        回复
          4个线程,执行每一次循环加或减,并等待所有线程都执行完,然后继续下一次加减


          IP属地:广东来自iPhone客户端5楼2017-07-07 15:45
          收起回复


            IP属地:广东来自iPhone客户端6楼2017-07-07 17:48
            回复
              package DomeTB;
              public class Dome implements Runnable{
              int water=0;
              int time=0 ;
              public void run() {
              while(true) {
              if(water>=10000){
              System.out.println(Thread.currentThread().getName()+"用了"+time+"小时");
              return;
              }else xsc();
              }
              }
              public synchronized void xsc(){
              water+=15;
              water-=(8/3);
              time++;
              }
              }


              IP属地:江苏8楼2017-07-08 14:41
              回复
                package DomeTB;
                public class DomeZ {
                public static void main(String[] args) {
                Dome dome=new Dome();
                Thread do1=new Thread(dome,"进水口1");
                Thread do2=new Thread(dome,"进水口2");
                Thread do3=new Thread(dome,"进水口3");
                do1.start();
                do2.start();
                do3.start();
                }
                }


                IP属地:江苏9楼2017-07-08 14:41
                回复
                  2025-05-10 22:23:10
                  广告
                  我也刚学到这里,手打了,你试试,我试了没问题,就共享资源嘛,接口实现


                  IP属地:江苏10楼2017-07-08 14:42
                  回复
                    public class WaterFlooding implements Runnable{
                    private static Double WATERCOUNT=0.0;
                    private static Integer TIME=0;
                    @Override
                    public void run() {
                    while(true){
                    if(WATERCOUNT>=10000){
                    System.out.println(Thread.currentThread().getName()+"用了"+TIME+"个小时将水池注满");
                    break;
                    }else {
                    exe();
                    }
                    }
                    }
                    private synchronized void exe(){
                    WATERCOUNT+=15;
                    WATERCOUNT-=8.0/3;
                    TIME++;
                    }
                    public static void main(String[] args) {
                    WaterFlooding waterFlooding=new WaterFlooding();
                    Thread t1=new Thread(waterFlooding,"进水口A");
                    Thread t2=new Thread(waterFlooding,"进水口B");
                    Thread t3=new Thread(waterFlooding,"进水口C");
                    t1.start();
                    t2.start();
                    t3.start();
                    }
                    }


                    11楼2018-02-26 14:19
                    回复