2

如果某个线程在java中通过此方法拥有,如何跳过方法,我知道在.net中存在Monitor.TryEnter,我可以通过以下方式完成:

if(Monitor.TryEnter()){
 //do work
}
//else skip

但是我怎样才能在 java 中完成这种行为,这与 java 中的任何等价物都是Monitor.TryEnter一样的。

4

2 回答 2

5

ReentrantLock#tryLock()为你工作吗?

它具有您想要的行为,它需要一个显式锁定对象,因此它不适用于嵌入式 Java 对象监视器 - 我不相信tryLock()Java 对象监视器有等效的。

于 2012-12-07T20:50:02.843 回答
1

我认为您最好使用java.util.concurrent.Semaphore

如果您使用持有一个许可证的信号量:

Semaphore semaphore = new Semaphore(1);

结果代码看起来几乎相同:

if (semaphore.tryAcquire()) {
    try {
        // do work
    } finally {
        semaphore.release();
    }
}
// else skip

我想在.Net中你还必须确保再次释放锁。

于 2012-12-08T11:25:13.027 回答