web-dev-qa-db-ja.com

Javaのモニターとは何ですか?

Javaの並行プログラミングで参照されるモニターとは何ですか?

「すべてのオブジェクトがモニターに関連付けられている」と読むと、どういう意味ですか?

それは特別なオブジェクトですか?

111
xdevel2000

モニターは、オブジェクトへの同時アクセスを制御するメカニズムです。

これにより、次のことが可能になります。

スレッド1:

public void a()
{
    synchronized(someObject) {
        // do something (1)
    }
}

スレッド2:

public void b()
{
    synchronized(someObject) {
        // do something else (2)
    }
}

これにより、スレッド1と2が同時に監視(同期)セクションにアクセスすることを防ぎます。 1つが開始し、最初の1つが終了する前にもう1つが領域にアクセスするのをモニターが防止します。

特別なオブジェクトではありません。クラス階層ルートに配置された同期メカニズム:Java.lang.Object

また、異なるスレッド間の通信にオブジェクトのモニターを使用するwaitおよびnotifyメソッドもあります。

78

モニターは、 lock wait set の両方を持つエンティティです。 Javaでは、任意のObjectがモニターとして機能します。

Javaでモニターがどのように機能するかの詳細な説明については、 Javaでの並行プログラミングMonitor Mechanicsセクションを読むことをお勧めします。 =(前のリンクはGoogleブックのプレビューを表示し、そのセクションは読むことができます)。

24
JRL
  1. モニターは、Java Language;
  2. 「並行プログラミングでは、モニターとは、複数のスレッドが安全に使用することを目的としたオブジェクトまたはモジュールです」;
  3. すべての読者が知っているように、JavaのすべてのオブジェクトはJava.lang.Objectのサブクラスです。Java Javaプログラマーが任意のオブジェクトをモニターとして使用できるようにする機能と特性を備えた方法。たとえば、すべてのオブジェクトには待機キュー、再入待ちキュー、待機および通知メソッドがあります。それはモニターです。
  4. モニターについて読む こちら
9
mgibson

Java言語およびランタイムシステムは、モニターの使用によるスレッド同期をサポートします。
モニターは特定のデータ項目(条件変数)に関連付けられ、そのデータのロックとして機能します。スレッドがあるデータ項目のモニターを保持している場合、他のスレッドはロックアウトされ、データを検査または変更できません。

4
user7587921

http://Java.Sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#33308

オブジェクトへのアクセスを1つずつ制御するメカニズム

3
naikus

モニターは、スレッドが相互排除と特定の条件が満たされるのを待機(ブロック)する機能の両方を持つことができる同期構造です。

モニターには、他のスレッドに条件が満たされたことを通知するメカニズムもあります。これは、ロックと待機セットの両方を所有するエンティティです。 Javaでは、任意のオブジェクトをモニターとして使用できます。

Java仮想マシンでは、すべてのオブジェクトとクラスは論理的にモニターに関連付けられます。モニターの相互排除機能を実装するには、ロック(mutexと呼ばれることもあります)が各オブジェクトとクラスに関連付けられますこれは、オペレーティングシステムの用語ではセマフォと呼ばれ、ミューテックスはバイナリセマフォです。

詳細についてはリンクを確認してください

2
Swati Gour

http://journals.ecs.soton.ac.uk/Java/tutorial/Java/threads/monitors.html

モニターは、オブジェクトまたはデータメンバーに関連付けられます。これは、データメンバーまたはオブジェクトが入力されたときに取得され、同期ブロック(クリティカルセクション)であり、終了時に解放されます。

1
Amit Rai