ホームページ >Java >&#&チュートリアル >sleep()、wait()、yield() の違いと用途

sleep()、wait()、yield() の違いと用途

零下一度
零下一度オリジナル
2017-06-30 09:56:483049ブラウズ

スリープ。スレッドがスリープし、ストレート スレッドが一定期間一時停止し、タイミング待機状態に入ることができます。

メソッド: static void sleep(long millis) sleep を呼び出した後、現在のスレッドは指定された期間内に CPU を放棄し、sleep が配置されているスレッドは実行する機会を取得できません。この状態のスレッドは、同期ロック/同期リスナーを解放しません。

この方法は、ネットワーク遅延をシミュレートするために使用され、複数のスレッドが同じリソースに同時にアクセスすることによるエラーの影響をより明確にします

お待ちください、スレッド通信メソッドですが、java.lang.Objectクラスはスレッド通信を操作するメソッドを2種類提供しています。

wait(): このメソッドを実行するスレッド オブジェクトは、同期ロックを解放し、JVM はスレッドを待機プールに保存し、他のスレッドがスレッドをウェイクアップするのを待ちます。

notify(): このメソッドを実行するスレッドは、待機プールで待機しているスレッドをウェイクアップし、そのスレッドをロック プールに転送して待機します。

notifyAll(): このメソッドを実行するスレッドは、待機プールで待機しているすべてのスレッドを起動し、スレッドをロックプールに転送して待機します。

(注: 上記のメソッドは、同期監視ロック オブジェクトによってのみ呼び出すことができます。それ以外の場合は、エラー IllegalMonitorStateException. が報告されます)

スレッドの礼儀として、現在のスレッド オブジェクトがスケジューラーに要求することを意味します。 CPU を放棄するつもりですが、スケジューラはプロンプトを自由に無視できます。

このメソッドを呼び出した後、スレッドオブジェクトは準備完了状態になるため、スレッドが yield() を呼び出した後、スレッドスケジューラーが再実行のスケジュールを立てる可能性は十分にあります。

このメソッドは開発ではほとんど使用されないことが、主にマルチスレッド競合状態によるエラーの解決に役立つ可能性があることが明らかです。

さらに: sleep メソッドと yield メソッドの違い:

1. どちらの場合も、現在実行中のスレッドが CPU を放棄し、他のスレッドに実行の機会を与える可能性があります。

2. sleep メソッドは他のスレッドに実行の機会を与えますが、yield メソッドは他のスレッドの優先順位に関係なく、同じ優先順位またはより高い優先順位のスレッドにのみ実行の機会を与えます。

3. sleepメソッド呼び出し後、スレッドはタイミング待ち状態に入り、yieldメソッド呼び出し後、スレッドはready状態になります。

スレッドのライフサイクル図:

以上がsleep()、wait()、yield() の違いと用途の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。