java Thread 中有三个方法用于中断线程,分别是:
1)public static boolean interrupted();
2)public boolean isInterrupted();
3)public void interrupt();
第一个方法是类方法,其余两个是实例方法。
先说第三个方法interrupt,其作用是给线程发送一个中断的信号量,也就是设置线程实例中的某个标记(假设称为stopFlag)字段为true,源码里的注释如是:Just to set the interrupt flag,该方法并不会立刻终止线程,线程依旧会继续跑下去。注:如果在线程受阻状态下(wait,sleep等)调用该方法,将会抛出一个InterruptException.
-----------------------------------------------------------------
那么如何立刻终止线程呢?
isInterrupted()方法返回stopFlag的值,所以在run方法中,可以手动终止该线程,可以在run方法中添加如下代码:
if(Thread.currentThread().isInterrupted()){
reutrn ;
}
----------------------------------------------------------------------------
最后还有第一个方法interrupted(),该方法将清除中断状态,如果本次调用进行了清除操作,则返回true,否则返回false;
举个例子:
如果stopFlag为true,调用interrupted(),则stopFlag将被设置为false,同时函数返回true;
如果stopFlag为false,调用interrupted(),则直接返回false.