[Javaベース]Javaのinterruptとsleepが何をしたか推測する
先日、スレッドブロック、目覚まし、クロック中断の知識を学び、主にlinuxカーネル書籍から入手しました(資料はHttpClientテクノロジーベースのタイムアウトとkeepalive.zip).今日はJavaのinterruptとsleepが何をしたのか推測すべきだと思います.
interrupt():
(1)スレッドの割り込み状態をtrueに設定する.
(2)スレッドがちょうどブロック状態にある場合、それを起動する.
---------------------------------------------------------------------------------------------------------------------------------
sleep(timeout):
(1)スレッドの割り込み状態をまずチェックし,trueであればInterruptedExceptionをそのまま投げ出す.
(2)クロック割込み処理プログラム:timeout時間設定後、タイマがクロック割込みを発行し、CPUがクロック割込み処理プログラムを実行する.
(3)自分を掛ける.
(4)目が覚めた…様子を見てみる:
時計に呼び覚まされた場合、戻ります.
割り込みプログラムではなくクロックで起動しない場合は、割り込み状態をfalseに設定し、InterruptedExceptionを放出します.
添付資料:HttpClientテクノロジーベースのタイムアウトとkeepalive.zip
interrupt():
(1)スレッドの割り込み状態をtrueに設定する.
this.interrupted = true; //
(2)スレッドがちょうどブロック状態にある場合、それを起動する.
if( , thread->state == TASK_INTERRUPTIBLE ){
thread->state == TASK_RUNNING;//
reschedule_Idle();
}
---------------------------------------------------------------------------------------------------------------------------------
sleep(timeout):
(1)スレッドの割り込み状態をまずチェックし,trueであればInterruptedExceptionをそのまま投げ出す.
if(this.interrupted == true){ //
this.interrupted == false;
throw new InterruptedException();
};
(2)クロック割込み処理プログラム:timeout時間設定後、タイマがクロック割込みを発行し、CPUがクロック割込み処理プログラムを実行する.
:
currentThread->state == TASK_RUNNING;
reschedule_Idle();
(3)自分を掛ける.
thread->state == TASK_INTERRUPTIBLE;
schedule();
(4)目が覚めた…様子を見てみる:
時計に呼び覚まされた場合、戻ります.
割り込みプログラムではなくクロックで起動しない場合は、割り込み状態をfalseに設定し、InterruptedExceptionを放出します.
if(this.interrupted == true){ //( ) ,
this.interrupted == false;
throw new InterruptedException();
};
// , timeout , , ,
添付資料:HttpClientテクノロジーベースのタイムアウトとkeepalive.zip