0

http://www.ibm.com/developerworks/java/library/j-jtp04186/?S_TACT=105AGX52&S_CMP=の「JVM は通常、ブロックされたスレッドを一時停止し、後で再スケジュールすることでブロックを実装します」を読んでいるときに、この質問に出くわしました 。 cn-aj

プロセスまたはスレッドが IO 操作 (読み取り、書き込み) を行っているとき、または排他的なリソースへのアクセス (ロック、同期) を取得しているときにブロックされた場合、いつ再実行されるのでしょうか? 彼らはどこかから通知を受け取るまで常に待っていますか、それとも単に順番をやめてしばらくしてから再び実行しますか?

指定されたプラットフォームと何か関係がありますか? osまたはjvm?

4

1 に答える 1

0

これは、VM にスレッド サポートを提供する必要がある基盤となる OS に委ねられます。Java アプリが、OS に通常ロードされる他のすべてのプロセスおよびスレッド (ブラウザ、サイドバー、ウイルス対策、ビデオ/オーディオ プレーヤー、トレント クライアント、OS 内部スレッドなど。

ブロックされたスレッドのコードは、CPU サイクルをまったく取得しません。その状態のスレッドは、今のところ未使用のスタック割り当てと、カーネル内のコンテナー内の追加の構造体/クラス ポインターであり、他の何かがその状態を変更するのを待っています。ブロックされたまままたは長時間続くと、ビジー状態のシステムでスタックがスワップアウトされることさえあります。

そうです、彼らはどこかから通知を受け取るまで常に待っています。

于 2013-08-13T07:56:04.880 に答える