Object
クラスに 、 、 などのスレッド関連のメソッドがwait()
あるnotify()
のはなぜnotifyAll()
ですか?
クラスにスレッドのような動作を与えるには、拡張Thread
または実装する必要があります。Runnable
では、なぜそれらはいずれThread
かまたはRunnable
オブジェクトの一部にされなかったのでしょうか?
Object
クラスに 、 、 などのスレッド関連のメソッドがwait()
あるnotify()
のはなぜnotifyAll()
ですか?
クラスにスレッドのような動作を与えるには、拡張Thread
または実装する必要があります。Runnable
では、なぜそれらはいずれThread
かまたはRunnable
オブジェクトの一部にされなかったのでしょうか?
Java 同時実行モデルはロックを使用して、マルチスレッド環境でオブジェクトへの相互排他的アクセスを実装します。ロックは、スレッドだけでなく、Java のすべてのオブジェクト (タイプ「オブジェクト」) に関連付けられます。
1) 待機と通知は、Java の 2 つのスレッド間の通信メカニズムです。クラスはすべてのオブジェクトのスーパークラスであるため、Object
すべてのオブジェクトでそれらを使用できるようにする正しい場所です。
2) ロックはオブジェクトごとに利用可能になります。これは、wait と notify が Thread クラスではなく Object クラスで宣言されるもう 1 つの理由です。
スレッドがオブジェクト インスタンスでロックされている場合、そのオブジェクト インスタンスで通知を呼び出すと、それらのスレッドが起動されます。したがって、ロックはオブジェクト インスタンスであるため、そのロックに関連する操作はオブジェクト インスタンスに属します。