疯狂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对象。