私はこれらの2つの記述について非常に紛らわしいです:通知方法は、1スレッドを待ってブロック解除が、あきらめていません」「waitメソッド呼び出しスレッドをブロックし、モニターロック断念」Javaスレッドでwaitメソッドとnotifyメソッドを理解するにはどうすればよいですか?
- をロックを監視する「ここで
は私の質問です:
私は、Javaの各オブジェクトがロックを持って知っているが、何である」MONIロックを意味する?それはojectのロックと同じですか?
なぜnotifyメソッドは、モニタロックを放棄する必要がありますか?
私は次のコードで待機しているオブジェクト作成しようとした場合:上記の最初の説明と同様に
class simpleTask extends Thread { int waitingTime; public simpleTask(int waitingTime) { this.waitingTime = waitingTime; } public void run() { synchronized(this) // this is a reference of current object { try { this.wait(waitingTime); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
を、であることは、現在のオブジェクトはsynchronizedキーワードによってブロックされることを意味し、次に待ちますメソッドはロックを解除しますか?
あなたの答えをありがとう!しかし、あなたの説明で:someObject.wait()を呼び出すとsomeObjectのスレッドのロックが解放され、wait()コールが戻る前に再取得され、wait()コールが戻る前にロックを再取得するでしょうか?再度、感謝します! –
@Miles Zhang:同じスレッドが利用可能であれば、同じスレッドがそれを再取得します(つまり、他のスレッドがまだ獲得していないスレッド)。 – Tudor
@MilesZhang - 解明する答えを更新しました。 –