有没有人知道是否可以为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()
是一个同步方法,由于许多其他想要锁定的线程,也可能需要一些时间才能进入。
谢谢!
答案 0 :(得分:2)
在Java中,有很多方法可以实现这一点。一种方法是使用任何Lock
对象,它具有tryLock(...)
方法,允许您等待锁定一段时间。如果能够获得锁定,则返回true
;如果超时,则返回false
。 ReentrantLock
可能是个不错的选择。
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中无法做到这一点。