スレッドをブロックする Java のメソッド
Javaではスレッドをブロックする以下のメソッドがあります。
- スレッドクラスのsleepメソッドを呼び出すと、スレッドの実行を指定時間一時停止でき、その間はロックリソースが解放されず、他のスレッドもそのロックを取得できません。
- waitメソッド:Objectクラスのwaitメソッドを呼び出すと、スレッドは待機状態になり、保有しているロックリソースを解放し、呼び出しから復帰するまで、呼び出し元が復帰するかタイムアウトになるまで実行を続行しません。
- joinメソッド:スレッドクラスのjoinメソッドを使うと、mainスレッドは別のスレッドが終わるまで待機し、そのスレッドが終了したら実行を継続します。
- synchronizedキーワード:synchronizedキーワードを付与したメソッドやコードブロックはオブジェクトのロックリソースを獲得し、それ以外のスレッドはロックを獲得するまでブロックされる。
- オブジェクトクラスのwait/notifyメソッドを利用して、スレッド間の待ち合わせと起床を実装します。 waitメソッドを呼び出したスレッドは、所有していたロックを解除し、起床されるまで待機状態となります。その後、他のスレッドがnotify/notifyAllメソッドを呼び出すことで、起床させることができます。
- I/O処理:スレッドがI/O処理を行っている際、読み書きするリソースの準備ができていないとスレッドはブロックされ、リソースの準備ができるまで実行を継続できません。
- ロック・コンディション機構: Lock と Condition インターフェースの lock メソッドと await メソッドを使うことで、wait/notify 機構と同様に、スレッドの待ち受けとウェイクアップを実装できる。
- CountDownLatchクラス:CountDownLatchクラスを利用することでスレッドの待ち合わせや待ち受けを実現できます。スレッドはawaitメソッドを呼び出すことで、指定された数のスレッドが処理を完了するまで待機してから、処理を続行できます。