0

Javaでモニターをどのように使用するかを正確に理解しようとしています。私の知る限り、Javaには、バイナリセマフォやカウンティングセマフォのように作成できるモニターはありません。これが事実なので、人々が次のようなことをしているのを見ると、正確にはどういう意味ですか。

while(!B){ 
    x.wait(); 
}

この場合、xは正確に何でしょうか?wait()メソッドを持つモニターアクションを模倣するのは、彼らが構築したクラスですか?

なぜこれをしないのですか

while(!B){
    wait();
}

?複数のモニターを持つことができるようにするためですか?もしそうなら、なぜですか?この時点では、セマフォを使用した方がよいようです...

全体として、私の問題は、モニターとは何か、そしてモニターをどのように適切に使用するかを本当に理解することだと思います。私はあなたが私に与えることができるどんな洞察にも感謝します。

4

1 に答える 1

1

wait()のメソッドですjava.lang.Object。すべてのJavaオブジェクトには、モニターと呼ばれる本質的なロックがあります。

x.wait()変数によるオブジェクト参照を待機しますxwait()はと同等であるためthis.wait()、によって参照されるオブジェクトを待機しますthis

とはいえ、これwait()は非常に低レベルであり、抽象化を使用するのは困難です。SemaphoreJavaが持っている...のような高レベルの抽象化を使用する方がよいでしょう。javadocで確認してください。

これらのトピックをカバーするJavaの並行性チュートリアルもチェックしてください。

于 2013-02-18T23:11:58.980 に答える