Java相当于Ada Select语句

时间:2012-10-01 00:31:00

标签: java multithreading ada

有没有人知道是否可以为Java中的线程创建一个Ada样式的select语句,或者是否有相同的方法来执行它?

具体来说,我希望能够使用结构:

select
  javaThread.someEntry();
else
  //do something else if call not accepted straight away
end select

select
  javaThread.someEntry();
or
  //delay before entry call expires
end select

其中someEntry()是一个同步方法,由于许多其他想要锁定的线程,也可能需要一些时间才能进入。

谢谢!

1 个答案:

答案 0 :(得分:2)

在Java中,有很多方法可以实现这一点。一种方法是使用任何Lock对象,它具有tryLock(...)方法,允许您等待锁定一段时间。如果能够获得锁定,则返回true;如果超时,则返回falseReentrantLock可能是个不错的选择。

private final Lock lock = new ReentrantLock();
...

if (lock.tryLock(1L, TimeUnit.SECONDS)) {
   try {
      // we were able to lock
   } finally {
      // always unlock in a finally
      lock.unlock();
   }
} else {
   // trying to lock timed out without locking
}

在评论中进行一些讨论之后,我现在明白你已经有了{id}}方法,你只想等待一段时间。不幸的是,使用synchronized关键字在Java中无法做到这一点。