1

スレッド Synchronizationに関して混乱があります。2 つのスレッドThread1Thread2と、同期された 2 つのメソッドfoo1()foo2()があるとします。foo1() は同期メソッドであり、foo2() はそうではありません。foo1 には内部的に foo2() を呼び出すステートメントがあり、Thread1 が foo1() を呼び出し、それが foo2() メソッドで動作している場合、同時に Thread2 が必要です。同期されていない foo2() メソッドに直接アクセスします。

私の質問は、Thread2 が Foo2() にアクセスできるかどうかです。それともスレッド 1 がそのタスクを完了するのを待ちますか?

4

4 に答える 4

4

が同期されていない場合foo2()、どのスレッドでもブロックされることなくいつでも呼び出すことができます。スレッドがそれ自体が同期されている別のメソッドからそれを呼び出しているかどうかに違いはありません。

于 2012-04-27T09:06:02.290 に答える
3

ロックされるのはオブジェクトであり、メソッドではありません。これは、異なるオブジェクトにアクセスしている場合、foo1()に2つのスレッドを含めることができることを意味します。彼らが同じオブジェクトにアクセスしている場合、同じロックは、最初に呼び出されたものやそれを呼び出したものに関係なく、同時アクセスを防ぎます。

ところで:foo1()はすでにロックを持っているので、自分自身を呼び出すことができます。

于 2012-04-27T09:10:58.973 に答える
1

Thread2 はブロックされず、待機しません。同期されていないため、実行 Foo2 を開始します。

于 2012-04-27T09:06:55.437 に答える
0

foo2() は同期メソッドではないため、スレッド 2 は foo2() を直接呼び出すことができます。そのため、任意のスレッドが呼び出して、現在のオブジェクトのモニターを取得することはできません。</p>

于 2012-04-27T09:27:33.227 に答える