2016-12-03 6 views
1

Javaスレッドでわかっているように、startメソッドの呼び出しから始まり、呼び出すときはthread.wait()です。それは走っている状態から待機する状態になり、睡眠を呼び出すとそれは起こりません。Javaでスレッドステートを待機/ブロッキング状態にすることを維持する人

私の質問は、実行状態からブロック状態への状態遷移を管理するのは誰ですか? Javaでの役割はありますか?

+0

JVM :) http://www.javatpoint.com/life-cycle-of-a-thread – firephil

+0

Alexは以下のように指摘しているように、OSはスレッドをブロックする責任があります。 'ThreadLocal'は全く別のアイデアです。高速アクセスのためにあるスレッド状態をJVMキャッシュで見ることができましたが、スレッド実行(実行中、ブロック済み、準備完了)の詳細の大半はOSによって直接処理されます。 – markspace

答えて

1

スレッド管理は、オペレーティングシステムのドメインです。これは、スレッドを待ち状態にし、必要に応じて起動するOSです。もちろん、JavaスレッドAPIをシステムコールに変換するJava中間層があります。つまり、JVMと直接対話しますが、デスクトップシステムでは、オペレーティングシステムでサポートされているスレッドを使用してスレッドを実装します。

コーナーケースが異なる場合があります。たとえば、OSなしでJVMを実行するベアメタルシステムがあるとします。この場合、スレッドサポート(存在する場合)はJVMによって実装されます。また、通常のスレッドに似ていますが、OSがサポートされていないアプリケーションでも管理される緑のスレッドという概念もあります。

+0

こんにちはAlexeyあなたが言ったように、Java 1.2で導入された緑のスレッドは、後で削除されました。 –

+0

私はJavaでのその機能の実装に慣れていないので、良い文書を指摘することはできません。しかし、これは多くの現代の言語に見られる比較的一般的な考えです。コルーチン、グリーンレット、ファイバー、非同期と呼ばれることがあります。主な考え方は、公平なスケジューリング、同時実行およびメモリ保護が必要ない場合、アプリケーション内でこのような特定のスレッド間をずっと高速に切り替えることができるということです。 OSはそれらについて知らないので、あなたは単一のスレッドを実行すると考えています。 –

1

実行状態からブロック状態への状態遷移を管理するのは誰ですか? JavaにthreadLocalの役割はありますか?

JVMスレッドスケジューラは、スレッドのライフサイクルと異なるスレッド状態(READY、RUNNING、WAITなど)を維持します。つまり、スレッド作成からスレッド終了までの間です。これは、スレッド状態を1つから別のものに移動させるスレッドスケジューラです。つまり、実行中または実行中から実行中などに実行します。

アレクセイは言いましたが、スレッドはオペレーティングシステム(OS)。

ThreadLocal

オブジェクトが各スレッドに対してローカルであり、すなわち変数を格納および取得するために使用することができ、ThreadLocalオブジェクト内に格納され変数が唯一そのスレッドに表示され、他のスレッドのためにアクセスすることはできません。

関連する問題