[Java基础]猜测Java的interrupt和sleep做了什么

前些时期,学习过线程阻塞,唤醒,时钟中断的一些知识,主要是从linux内核书籍中获取(资料在HttpClient技术基础之超时和keepalive.zip ),今天思考了一下,觉得应该猜测Java的interrupt和sleep做了什么。

 

 

 

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

你可能感兴趣的:(java,thread,linux)