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