首页 > 代码库 > Java的多线程 --线程中断

Java的多线程 --线程中断

  当线程的run方法执行方法体中的最后一条语句后,并由执行return语句返回时,或者出现了方法中没有捕获的异常时,线程将终止。

  有一种可以强制线程终止的方法:interrupt可以用来请求终止线程。当对一个线程调用interrupt方法时,线程的中断状态将被置位,每一个线程都具有boolean标记。每个线程都应该不时的检查这个标记,以判断线程十分被中断。

     要想清楚中断状态十分被置位,首先调用静态的Thread.currentThread()方法获得当前线程,再调用isInterrupted 方法就可以判断的出来。一般格式是下面这样的

 

while(!Thread.currentThread().isInterrupted()&&more work to do)
{
  //do more work
}

 

   我们要清楚线程中断,只不过是把线程打上一个标记,其实线程的状态还是可运行的(理解成还在运行中)。这样我可以决定如何响应中断。

   线程阻塞,那么isInterrupted实例方法就不能检测出中断标记,这样就会产生InterruptedException异常。

这种线程的run方法具体格式如下:

public void run()
{
   try
  {
    //...
    while(Thread.currentThread().isInterrupted()&&more work to do)
     { 
       //do more work
     }
  }
   catch(InterruptedException e)
  {
  }
  finally
  {
  
   }
}

 注意点: Thread中有几个相似的方法,大家一定要区分开。

1.void interrupt(): 向线程发生中断请求,线程的中断状态将被设置为true.

2.static boolean interrupted():这个是静态方法,检测当前线程(正在执行这个命令的线程)是否被中断。同时它还会清楚当前线程的中断状态重置为flase.

3.boolean inInterrupted() 这个是实例方法,检查线程十分被中断,它不会重置线程的中断状态。

4.static Thread currentThread():返回代表当前线程的Thread对象。