Thread.interrupt
は、sleep
,join
およびwait
のようなコールを中断します。どのように正確に実装されているのだろうか。Javaで割り込みがどのように知っていますか?
私は知っているThread.interrupt
は、フラグisInterrupted
を設定します。 wait
はこのフラグをポーリングするだけですか?私はそれがしないことを望む。だから私の質問はどのようにwait
"割り込み"について知っている。
Thread.interrupt
は、sleep
,join
およびwait
のようなコールを中断します。どのように正確に実装されているのだろうか。Javaで割り込みがどのように知っていますか?
私は知っているThread.interrupt
は、フラグisInterrupted
を設定します。 wait
はこのフラグをポーリングするだけですか?私はそれがしないことを望む。だから私の質問はどのようにwait
"割り込み"について知っている。
wait()
はポーリングしません。 interrupt()
は中断されたスレッドの状態をチェックします。実行されている場合は、フラグを設定するだけです。それがwait()
、sleep()
、またはjoin()
である場合、中断するスレッドはそれをプロセッサにキューイングします。中断されたスレッドが実行を再開すると、まずフラグをチェックし、フラグがオンの場合はInterruptedExceptionをスローします。
これは、システムがJVMではなくスレッドを処理しているため、OSの懸案事項です。各OSは異なる方法でスレッドを扱います。
です。私はLinuxでpthreadsがどのように実装されているのだろうか? – Michael
@マイケル、それは最終的にOSシンクロコールイベント、コンドルアまたはセマフォになる。このような呼び出しは、呼び出しスレッドを準備完了状態から外し、CPUへのディスパッチには使用できません。スレッドは、実行を受け付けない「死んだ」コードになります。通知や割り込みやスリープの終了などの別のスレッドからの信号は、スレッドを再び準備し、CPUコアが使用可能になると実行します。 –
待ち時間と結合は、中断されたフラグをチェックしません。後でsleep()を呼び出すスレッドに割り込んだ場合は中断されますが、wait()またはjoin()を呼び出すと何も起こりません。
Javaソースを探索しようとしましたか? – Ankit
システム割り込み – BlackJoker
'wait()'はネイティブメソッドです:-)ソースはありません – sanbhat