0

同期ブロックを使用しているときに「これ」を渡す必要があるのはなぜですか? 同期のパートナーの目的は何ですか?

4

5 に答える 5

0

Java同期ブロック構造は、括弧内のオブジェクトを取ります。「this」は、メソッドが呼び出されるインスタンスです。同期された構成によって括弧で囲まれたオブジェクトは、モニターオブジェクトと呼ばれます。コードは、モニターオブジェクトで同期されていると言われます。同期インスタンスメソッドは、それが属するオブジェクトをモニターオブジェクトとして使用します。

同じモニターオブジェクトで同期されたJavaコードブロック内で実行できるスレッドは1つだけです。

于 2013-03-13T08:47:00.170 に答える
0

同期は指定したオブジェクトで実行されます。つまり、2つのスレッドが同じオブジェクトで同期する場合、一度にコードブロックを実行できるのは1つだけです。

多くの場合はですが、任意のオブジェクトにすることができますthis

これにより、たとえば、同じクラスの異なるオブジェクトで同期することができます。

于 2013-03-13T08:47:16.543 に答える
0

synchronizedロックオンするオブジェクトが必要だからです。thisは非常に便利Object lock = new Object()ですlock

または、メソッドを としてマークすることもできますsynchronized

于 2013-03-13T08:45:01.110 に答える
0

syntex はsynchronized(objectLock) { } 必ずしもthis必要ではありません。複数のスレッドが同じ同期ブロックを実行しようとしている場合に排他的アクセスを許可するオブジェクトを渡す必要があります。このようにして、任意の時点で、2 つ以上のスレッドが同期ブロックのアクセスを試みた場合、渡されたオブジェクト (thisこの場合は ' ') は、ブロックの実行が終了しない限り、ブロックの排他的アクセスを持ちます。そのブロックにアクセスできます。

于 2013-03-13T08:48:38.840 に答える
0

Synchronize は、オブジェクト参照を使用して監視オブジェクトをロックします。同時アクセスから保護する各リソースには、独自のモニター オブジェクトが必要です。これを行う最も簡単な方法は、多くの場合、 を使用することthisです。

于 2013-03-13T08:53:54.480 に答える