阻止线程

时间:2016-04-17 11:29:33

标签: java multithreading blockingqueue

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

world.getCities().get(cityID).getQueue().put(request);

然后我想在着陆期间燃烧一些燃料:

Thread.sleep(500);
fuelTank = fuelTank - 100;

现在飞机可以轻松降落,所以我使用方法take():

world.getCities().get(cityID).getQueue().take();

当下一架飞机完成所有操作后,可以开始着陆程序。

但是飞机正在等待0.5秒,因此他的燃料天堂没有改变,它将燃烧与此飞机相同数量的燃料,而第二次燃烧的燃料要多得多。

再一次。我需要某种机制来计算阻塞的线程时间或在阻塞期间做一些事情。

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

它应该大致像这样:

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