2

一部のスレッドがJavaでこのメソッドを所有している場合にメソッドをスキップする方法、私は.netに存在することを知っており、Monitor.TryEnter次のような方法でそれを達成できます:

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

しかし、Javaでその動作を達成するにはどうすればよいですか。これはMonitor.TryEnterJavaと同等です。

4

2 に答える 2

5

あなたReentrantLock#tryLock()のために働くでしょうか?

必要な動作がありますが、明示的なロック オブジェクト必要なため、組み込みの Java オブジェクト モニターでは機能しません。Java オブジェクト モニターに相当するものはないと思いtryLock()ます。

于 2012-12-07T20:50:02.843 に答える
1

おそらくjava.util.concurrent.Semaphoreを使用するのが最善だと思います。

1 つの permit を保持するセマフォを使用する場合:

Semaphore semaphore = new Semaphore(1);

結果のコードは実質的に同じに見えます:

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

.Net では、ロックを再度解除する必要があると思います。

于 2012-12-08T11:25:13.027 に答える