Java 阻塞线程

Java 阻塞线程,java,multithreading,blockingqueue,Java,Multithreading,Blockingqueue,我想知道我是否可以在阻塞期间阻塞线程并做一些事情,或者只是在线程被阻塞时计算时间,因为我想为飞机排队。我的机场必须只有一个着陆点,所以我使用只有一个插槽的队列,然后使用put方法: world.getCities().get(cityID).getQueue().put(request); 然后我想在着陆时燃烧一些燃料: Thread.sleep(500); fuelTank = fuelTank - 100; 现在飞机可以轻松着陆,所以我使用take()方法: 一切就绪后,下一架飞机就可以

我想知道我是否可以在阻塞期间阻塞线程并做一些事情,或者只是在线程被阻塞时计算时间,因为我想为飞机排队。我的机场必须只有一个着陆点,所以我使用只有一个插槽的队列,然后使用put方法:

world.getCities().get(cityID).getQueue().put(request);
然后我想在着陆时燃烧一些燃料:

Thread.sleep(500);
fuelTank = fuelTank - 100;
现在飞机可以轻松着陆,所以我使用take()方法:

一切就绪后,下一架飞机就可以开始降落程序了

但飞机在等待0,5秒,所以他的燃料没有变化,它将燃烧与之前这架飞机相同的燃料量,这一秒应该燃烧更多

再说一遍。我需要某种机制来计算阻塞线程的时间,或者在阻塞期间做些什么

提前感谢。

您可以使用wait()-notify()方法代替sleep,它们更整洁。要计算被阻止线程的时间,请在wait()方法之前启动该线程,从即将被阻止的线程中生成一个新线程。 然后在wait()方法的立即行之后停止该线程

大致应该是这样的:

if(some_Condition_true) {
  //start counting thread
  wait();
  //halt counting thread
 }
if(some_Condition_true) {
  //start counting thread
  wait();
  //halt counting thread
 }