2

どちらも同様のことを行おうとしていますが、これはスレッドに何らかの影響を与えます。

thread.sleep は、CURRENT スレッドをスリープさせ、オブジェクトのロックを取得しようとしている場合は、任意のスレッドを待機させることができることを知っています。

問題は、ほとんどの場合、彼らは同じようなことをしているということです。なぜあなたはどちらかを選択するのですか?

4

4 に答える 4

11

いいえ、現在のスレッドもブロックObject.wait()するだけです。

主な違いはsleep()、現在のスレッドに一定期間スリープするwait()ように指示するのに対し、 は現在のスレッドにモニターを解放し、モニターに通知されるまでスリープするように指示することです。言い換えれば、wait()スレッド間の調整プリミティブですが、sleep()時間の経過のみを気にします (中断がないことを前提としています)。

于 2012-05-21T22:15:31.773 に答える
1

スリープと待機は説得力があるように見えますが、大きく異なります :

スリープ - スレッドを一定時間スリープさせます - タスクのスケジューリング、アニメーションなどに適しています...

待機 - ほとんどの場合、時間制限なしで使用されます。1 つのスレッドに何かが起こるのを待機させます。これは、同期のベスト プラクティスです。

スリープを使用して待機を実装しようとしている場合、それは悪い習慣であり、ビジー待機と呼ばれる非常に悪いことにいくらか近いものです。

于 2012-05-21T22:19:54.130 に答える
0

1 つはスレッドを同期するために使用され、もう 1 つは一定時間スリープするために使用されます。

スレッドを一緒に同期したい場合は、ユーザーが待機/通知します。既知の時間スリープする場合は、Thread.sleep を使用します。

于 2012-05-21T22:15:48.323 に答える
0

これら 2 つのメソッドは、非常に異なることを行います。通知イベント (発生するのに任意の時間がかかる場合があります) を待機しているThread.sleep間、指定された時間だけ待機します。Object.wait

どちらも現在のスレッドをスリープ状態にすることしかできません。また、Object.wait現在のスレッドがオブジェクトに関連付けられたモニターを保持している必要があります。

于 2012-05-21T22:16:16.393 に答える