如何“排队”同一线程?

我正在使用滑块构建电梯模拟器。我需要同时移动“电梯”,因此我考虑使用线程,但是我的知识是基于此主题的。 ;)我让电梯通过螺纹移动(请参见下面的代码),但我只能选择将特定的电梯移动到一层(例如,从4层移到10层),然后将电梯移到另一层(例如1层)如果我只是创建线程,电梯将尝试同时在两个方向上移动!所以我尝试检查线程名称是否已经存在,然后它只会朝一个方向移动。问题在于,它随后会忽略第二条命令向另一个方向移动。我认为这与以下事实有关:线程名称仍然存在,或者代码执行已移过第二个“命令”以移至第1层?请帮忙!

private void btnResetActionPerformed(java.awt.event.ActionEvent evt) {                                            
  moveLift(1, 10); //moves lift 1 to floor 10
  moveLift(1, 1); //should move lift 1 to floor 1 from 10
  moveLift(2, 10); //moves lift 2 to floor 10
}

private void moveLift(int liftNum, int floorNum) {
  boolean b = false;
  Set<Thread> threads = Thread.getAllStackTraces().keySet();
  for (Thread t : threads) {
    String name = t.getName();
    if (name.equals("Lift" + liftNum)) {
      b = true;
    }
  }
  if (!b) {
    MyThread mt = new MyThread(liftNum, floorNum);
    mt.setName("Lift" + liftNum);
    mt.start();
  }
}

是否有任何关于将moveLift命令排队的建议,以使线程不会互相影响?

评论