线程的中断不是停止线程的运行,而是在线程中设置中断状态,被中断的线程需要响应和处理中断状态。
Thread类定义了三个与中断相关的方法,分别说明如下:
● void interrupt()
该方法用于中断当前线程,设置当前线程为中断状态。
● boolean interrupted()
该方法用于判断当前线程是否处于中断状态,如果处于中断状态返回true,并清除线程的中断状态标记。
● boolean interrupted()
该方法用于判断当前线程是否处于中断状态,如果处于中断状态返回true,该方法不会清除线程的中断状态标记。
案例1:建立ThreadInterrup类,并在run()方法中编写线程功能代码。
在thread包下新建ThreadInterrup类。代码如下:
package thread;
/**
* @ClassName: ThreadInterrup
* @Description: 多线程操作(线程的中断)案例1
* @author 编程训练营
* @date
*
*/
public class ThreadInterrup extends Thread{
/**
* <p>Title: run</p>
* <p>Description: </p>
* @see java.lang.Thread#run()
*/
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
for( int i = 0; i<100; i++ ) {
// 响应中断
if (Thread.currentThread().isInterrupted()) {
System.out.println("ThreadInterrup线程被中断,程序退出。");
return;
}
System.out.println("ThreadInterrup:" + i);
}
}
}ThreadInterrup类对线程的中断状态进行了响应处理,在for循环中调用Thread类的isInterrupted()方法判断线程是否处于中断状态,如果被设置为中断状态则退出程序。
在thread包下新建ThreadInterrupTest测试类,启动ThreadInterrup线程,并调用interrupt()方法中断线程。代码如下:
package thread;
/**
* @ClassName: ThreadInterrupTest
* @Description: 多线程操作(线程的中断)案例1
* @author 编程训练营
* @date
*
*/
public class ThreadInterrupTest {
/**
* @Title: main
* @Description: Java程序入口main方法
* @param @param args 参数
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
// 实例化MyThread对象
ThreadInterrup thread = new ThreadInterrup();
// 调用Thread类的strat()方法启动线程
thread.start();
// 中断当前线程
thread.interrupt();
}
}在ThreadInterrupTest类主线程启动子线程后,应用Thread类的interrupt()方法中断子线程,因为子线程内部对线程中断状态进行了响应处理,因此子线程结束运行。
程序执行结果如下图所示:

当线程内部不响应中断状态时,调用Thread类的interrupt()方法对线程没有任何影响。
修改ThreadInterrup代码,将响应处理中断状态的代码注释掉:
public class ThreadInterrup extends Thread{
/**
* <p>Title: run</p>
* <p>Description: </p>
* @see java.lang.Thread#run()
*/
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
for( int i = 0; i<100; i++ ) {
// 响应中断
/*if (Thread.currentThread().isInterrupted()) {
System.out.println("ThreadInterrup线程被中断,程序退出。");
return;
}*/
System.out.println("ThreadInterrup:" + i);
}
}
}再次运行ThreadInterrupTest程序,子线程正常运行,没有退出程序。程序执行结果如下图所示:
