A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我试着写左转和直行的时间不一样,试几种方法都不行,可能是我对多线程掌握不好,以下是写两个计时器,也不行。怎么写才可以?
  1.     boolean flag=false;
  2.    Lock lock=new ReentrantLock();
  3.     Condition condition=lock.newCondition();
  4.     Condition conTimer=lock.newCondition();
  5.     Condition conTimer1=lock.newCondition();

  6.          public LampController(){
  7.              currentLamp=Lamp.StoN;
  8.              currentLamp.light();
  9.            final  ScheduledExecutorService timer=Executors.newScheduledThreadPool(1);
  10.             final ScheduledExecutorService  timer1=Executors.newScheduledThreadPool(1);
  11.              timer.scheduleAtFixedRate(new Runnable() {
  12.                  long start=System.currentTimeMillis();
  13.                  @Override
  14.                  public  void run() {
  15.                      lock.lock();
  16.                      System.out.println(currentLamp.name());
  17.                      if(currentLamp==Lamp.StoW||currentLamp==Lamp.EtoS){   flag=true;}
  18.                          try {
  19.                              while (flag){
  20.                             conTimer.await();
  21.                             conTimer1.signal();   }
  22.                              currentLamp=currentLamp.blackout();
  23.                              long end=System.currentTimeMillis();
  24.                              System.out.println(end-start);
  25.                              start=end;
  26.                          } catch (InterruptedException e) {
  27.                              e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
  28.                          } finally {
  29.                              lock.unlock();
  30.                          }




  31.                  }
  32.              },10,10,TimeUnit.SECONDS);


  33.              timer1.scheduleAtFixedRate(new Runnable() {
  34.                  long start=System.currentTimeMillis();
  35.                  @Override
  36.                  public void run() {
  37.                      lock.lock();
  38.                     // System.out.println(currentLamp.name());
  39.                      if(currentLamp==Lamp.StoN||currentLamp==Lamp.EtoW){ flag=false; }
  40.                          try {
  41.                              while (!flag){
  42.                              conTimer1.await();
  43.                              conTimer.signal(); }
  44.                              /*wait();
  45.                              timer.notify();*/
  46.                          } catch (InterruptedException e) {
  47.                              e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
  48.                          } finally {
  49.                              lock.unlock();
  50.                          }




  51.                      long end=System.currentTimeMillis();
  52.                      System.out.println(end-start);
  53.                      start=end;
  54.                      currentLamp=currentLamp.blackout();
  55.                   
  56.                  }
  57.              },5,5,TimeUnit.SECONDS);
  58.          }}
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马