3

Javaでスレッドに対してAdaスタイルのselectステートメントを使用できるかどうか、または同等の方法があるかどうかを誰かが知っていますか?

具体的には、構造を使用できるようにしたいと思います。

select
  javaThread.someEntry();
else
  //do something else if call not accepted straight away
end select

また

select
  javaThread.someEntry();
or
  //delay before entry call expires
end select

someEntry()他の多くのスレッドもロックを必要としているため、入力に少し時間がかかる可能性のある同期メソッドはどこにありますか。

ありがとう!

4

1 に答える 1

2

Javaでは、これを実現する方法がいくつかあります。1つの方法は、ロックを一定時間待機できるメソッドをLock持つオブジェクトのいずれかを使用することです。ロックを取得できた場合、またはタイムアウトした場合 tryLock(...)に戻ります。ここでは良い選択かもしれません。truefalseReentrantLock

private final Lock lock = new ReentrantLock();
...

if (lock.tryLock(1L, TimeUnit.SECONDS)) {
   try {
      // we were able to lock
   } finally {
      // always unlock in a finally
      lock.unlock();
   }
} else {
   // trying to lock timed out without locking
}

synchronizedコメントで話し合った結果、一定の時間だけ待ちたい既存のメソッドがあることがわかりました。synchronized残念ながら、Javaでキーワードを使用してこれを行う方法はありません。

于 2012-10-01T00:36:19.470 に答える