5

スレッドがセマフォを取得できない場合 (許可がないため) はどうなりますか。待ち状態に移行しますか?

EDIT:セマフォが利用可能になると、スレッドの開始は前の実行シーケンスを再開します。

4

1 に答える 1

5

スレッドがセマフォを取得できない場合 (許可がないため) はどうなりますか。待ち状態に移行しますか?

はい。あなたが話している場合java.util.concurrent.Semaphore(そして方法aquireこれが起こることです:

このセマフォからパーミットを取得し、パーミットが使用可能になるまでブロックするか、スレッドが中断されます。

[...]

利用可能な許可がない場合、現在のスレッドはスレッド スケジューリングの目的で無効になり、次の 2 つのいずれかが発生するまで休止状態になります。

  • 他のスレッドがこのセマフォの release() メソッドを呼び出し、現在のスレッドに次に許可が割り当てられます。また

  • 他のスレッドが現在のスレッドに割り込みます。

tryAquireただし、名前が示すように、ロックを取得しようとするだけで、許可がない場合はブロックする代わりに false を返します。

セマフォが使用可能になると、スレッドは以前の実行シーケンスを再開しますか。

はい。別のスレッドがこのスレッドを呼び出した場合、そのreleaseスレッドから戻ってacquire実行を継続できます。

于 2010-10-21T08:45:06.577 に答える