如果某个线程在java中通过此方法拥有,如何跳过方法,我知道.net中存在Monitor.TryEnter
,我可以通过以下方式实现:
if(Monitor.TryEnter()){
//do work
}
//else skip
但是我如何在java中实现这种行为,在java中是Monitor.TryEnter
的任何等价物。
答案 0 :(得分:5)
ReentrantLock#tryLock()
会为你效力吗?
它有你想要的行为,但是它需要一个显式的锁对象,因此它不能与嵌入式Java对象监视器一起工作 - 我不相信有一个等价于{ {1}}用于Java对象监视器。
答案 1 :(得分:1)
我认为您最好使用java.util.concurrent.Semaphore。
如果您使用持有一个许可证的信号量:
Semaphore semaphore = new Semaphore(1);
结果代码看起来几乎相同:
if (semaphore.tryAcquire()) {
try {
// do work
} finally {
semaphore.release();
}
}
// else skip
我想在.Net中你还必须确保再次释放锁。