どちらも同様のことを行おうとしていますが、これはスレッドに何らかの影響を与えます。
thread.sleep は、CURRENT スレッドをスリープさせ、オブジェクトのロックを取得しようとしている場合は、任意のスレッドを待機させることができることを知っています。
問題は、ほとんどの場合、彼らは同じようなことをしているということです。なぜあなたはどちらかを選択するのですか?
どちらも同様のことを行おうとしていますが、これはスレッドに何らかの影響を与えます。
thread.sleep は、CURRENT スレッドをスリープさせ、オブジェクトのロックを取得しようとしている場合は、任意のスレッドを待機させることができることを知っています。
問題は、ほとんどの場合、彼らは同じようなことをしているということです。なぜあなたはどちらかを選択するのですか?
いいえ、現在のスレッドもブロックObject.wait()
するだけです。
主な違いはsleep()
、現在のスレッドに一定期間スリープするwait()
ように指示するのに対し、 は現在のスレッドにモニターを解放し、モニターに通知されるまでスリープするように指示することです。言い換えれば、wait()
スレッド間の調整プリミティブですが、sleep()
時間の経過のみを気にします (中断がないことを前提としています)。
スリープと待機は説得力があるように見えますが、大きく異なります :
スリープ - スレッドを一定時間スリープさせます - タスクのスケジューリング、アニメーションなどに適しています...
待機 - ほとんどの場合、時間制限なしで使用されます。1 つのスレッドに何かが起こるのを待機させます。これは、同期のベスト プラクティスです。
スリープを使用して待機を実装しようとしている場合、それは悪い習慣であり、ビジー待機と呼ばれる非常に悪いことにいくらか近いものです。
1 つはスレッドを同期するために使用され、もう 1 つは一定時間スリープするために使用されます。
スレッドを一緒に同期したい場合は、ユーザーが待機/通知します。既知の時間スリープする場合は、Thread.sleep を使用します。
これら 2 つのメソッドは、非常に異なることを行います。通知イベント (発生するのに任意の時間がかかる場合があります) を待機しているThread.sleep
間、指定された時間だけ待機します。Object.wait
どちらも現在のスレッドをスリープ状態にすることしかできません。また、Object.wait
現在のスレッドがオブジェクトに関連付けられたモニターを保持している必要があります。