2011-09-11 12 views
3

オブジェクトのwait()メソッドは同期化されたコンテキストでのみ呼び出すことができます。つまり、wait()メソッドを呼び出すには、現在のスレッドでオブジェクトにロックを設定する必要があります。スレッドT1がオブジェクト(obj)にロックを持ち、waitメソッドobj.wait()を呼び出した場合他のスレッドがこのオブジェクト(obj)にロックをかけて、すでにT1を持っているwaitを呼び出すことはできますか?Threading-wait()

答えて

9

waitは、同期コンテキストを解放します。 documentationから:

現在のスレッドがこのオブジェクトのモニターを所有する必要があります。 リリースこのモニタと待機の 所有権別のスレッドが目を覚ますために、このオブジェクトのモニターで待機中 スレッドを通知するまでスレッド(...)

+0

ええ、同期化されたブロックは、他のスレッドがロックを取得できるハーフロックになります。同期化されたブロックは両方のステートメントの周りにあるため、起きたスレッドは同期化されたコンテキストに「結合」し、コンテキストの外でロックされたリソースにアクセスする機会はありません。 –

+0

「ハーフロック」..?! –

0

あなただけ待機を呼び出すの期間中に同期する必要があります()メソッドではなく、待機時間の持続時間です。