一部のスレッドがJavaでこのメソッドを所有している場合にメソッドをスキップする方法、私は.netに存在することを知っており、Monitor.TryEnter
次のような方法でそれを達成できます:
if(Monitor.TryEnter()){
//do work
}
//else skip
しかし、Javaでその動作を達成するにはどうすればよいですか。これはMonitor.TryEnter
Javaと同等です。
一部のスレッドがJavaでこのメソッドを所有している場合にメソッドをスキップする方法、私は.netに存在することを知っており、Monitor.TryEnter
次のような方法でそれを達成できます:
if(Monitor.TryEnter()){
//do work
}
//else skip
しかし、Javaでその動作を達成するにはどうすればよいですか。これはMonitor.TryEnter
Javaと同等です。
あなたReentrantLock#tryLock()
のために働くでしょうか?
必要な動作がありますが、明示的なロック オブジェクトが必要なため、組み込みの Java オブジェクト モニターでは機能しません。Java オブジェクト モニターに相当するものはないと思いtryLock()
ます。
おそらくjava.util.concurrent.Semaphoreを使用するのが最善だと思います。
1 つの permit を保持するセマフォを使用する場合:
Semaphore semaphore = new Semaphore(1);
結果のコードは実質的に同じに見えます:
if (semaphore.tryAcquire()) {
try {
// do work
} finally {
semaphore.release();
}
}
// else skip
.Net では、ロックを再度解除する必要があると思います。