6

Objectクラスに 、 、 などのスレッド関連のメソッドがwait()あるnotify()のはなぜnotifyAll()ですか?

クラスにスレッドのような動作を与えるには、拡張Threadまたは実装する必要があります。Runnableでは、なぜそれらはいずれThreadかまたはRunnableオブジェクトの一部にされなかったのでしょうか?

4

2 に答える 2

5

Java 同時実行モデルはロックを使用して、マルチスレッド環境でオブジェクトへの相互排他的アクセスを実装します。ロックは、スレッドだけでなく、Java のすべてのオブジェクト (タイプ「オブジェクト」) に関連付けられます。

1) 待機と通知は、Java の 2 つのスレッド間の通信メカニズムです。クラスはすべてのオブジェクトのスーパークラスであるため、Objectすべてのオブジェクトでそれらを使用できるようにする正しい場所です。

2) ロックはオブジェクトごとに利用可能になります。これは、wait と notify が Thread クラスではなく Object クラスで宣言されるもう 1 つの理由です。

于 2013-05-09T07:49:53.127 に答える
0

スレッドがオブジェクト インスタンスでロックされている場合、そのオブジェクト インスタンスで通知を呼び出すと、それらのスレッドが起動されます。したがって、ロックはオブジェクト インスタンスであるため、そのロックに関連する操作はオブジェクト インスタンスに属します。

于 2013-05-09T07:49:12.467 に答える