2011-01-28 45 views
6

可能性の重複:私の理解で
Are Thread.sleep(0) and Thread.yield() statements equivalent?JavaでThread.yield()とThread.sleep(0)の違いは何ですか?

、Thread.yield()とのThread.sleepの両方が(0)スレッドがいくつかのスケジューリングアルゴリズムによって実行するためのCPU再度判断をしなければなりません。

違いがある:

  1. Thread.yield()他のスレッドに執行機会を与えることですが、のThread.sleep(0)、それはちょうどあなたが再配置すべきCPUを教えてあげるません。実行スレッドは現在のスレッド自体を含む。

  2. Thread.yield()はまったく受け入れられないかもしれないが、Thread.sleep(0)は強制的に並べ替えることを意味するだけのアドバイスです。

上記の2つの結論は正しいですか?

+1

これらのメソッドは非常に実装依存であるため、言うことは非常に難しいです。これらのメソッドの振る舞いに頼るべきではありません。たとえば、Thread.yield()だけのループがあれば、CPUの99%以上を放棄しません。 Thread.sleep(0)は、OSに応じて0.5〜2msの間スリープすることがありますが、CPUをあきらめてしまいます。 –

答えて

-3

Thread.sleep()はスレッドを一時停止し、制御権を放棄しません。 Thread.yield()はスレッドを一時停止し、他のスレッドを実行できるようにします。必要なスレッドがなければ、元のスレッドは直ちに再開します。

+3

間違っていると思います。 Thread.sleep()はThreadをRunning状態から外し、スケジューラが別のRunnable ThreadをRunningに切り替えることを許可します(Thread.yield()も同様)。ただし、スレッドはロックを保持します。 –

2

Thread.Sleep()は、処理を起動させる何らかの種類のタイマーを含むシステムを作成するため、わずかに大きなオーバーヘッドがあります。 (基本的に実装に依存します)
最後にYield()を呼んでいます。

Thread.Yield()スレッドのターンをあきらめて、次のラウンドで獲得します。

Thread.Sleep(0)は、yieldを呼び出すだけの最適化を持つかもしれません。 (やはり、実装)

関連する問題