不当なセマフォ許可がすぐに利用できない場合、許可が利用可能になるtryAcquire(long timeout, TimeUnit unit)
までブロックしますか(つまり、実行を譲ります)、または許可が利用可能になるまでスピンしますか?
呼び出しが回転し、システムに多数のセマフォがある場合、システムは回転するセマフォを多数持つリスクを冒していませんか?
不当なセマフォ許可がすぐに利用できない場合、許可が利用可能になるtryAcquire(long timeout, TimeUnit unit)
までブロックしますか(つまり、実行を譲ります)、または許可が利用可能になるまでスピンしますか?
呼び出しが回転し、システムに多数のセマフォがある場合、システムは回転するセマフォを多数持つリスクを冒していませんか?
javadoc によると:
利用可能な許可がない場合、現在のスレッドはスレッド スケジューリングの目的で無効になり、次の 3 つのいずれかが発生するまで休止状態になります。
- 他のスレッドがこのセマフォの release() メソッドを呼び出し、現在のスレッドに次に許可が割り当てられます。また
- 他のスレッドが現在のスレッドに割り込みます。また
- 指定された待ち時間が経過する
これは、スレッドがブロックされているとマークされている (灰色の状態としてブロックされたキューに置かれている) ことを示しており、プロセッサは他の作業を行うことができます。