该如何正确的中断一个线程的执行?

时间:2022-05-01 00:43:46
摘要:本文以一个案例的形式,来为大家详细介绍下为何中断执行的线程不起作用。

本文分享自华为云社区《【高并发】我们该如何正确的中断一个线程的执行??》,作者: 冰 河 。

写在前面

当我们在调用Java对象的wait()方法或者线程的sleep()方法时,需要捕获并处理InterruptedException异常。如果我们对InterruptedException异常处理不当,则会发生我们意想不到的后果!今天,我们就以一个案例的形式,来为大家详细介绍下为何中断执行的线程不起作用。

程序案例

例如,下面的程序代码,InterruptedTask类实现了Runnable接口,在run()方法中,获取当前线程的句柄,并在while(true)循环中,通过isInterrupted()方法来检测当前线程是否被中断,如果当前线程被中断就退出while(true)循环,同时,在while(true)循环中,还有一行Thread.sleep(100)代码,并捕获了InterruptedException异常。整个代码如下所示。

package io.binghe.concurrent.lab08;
/**
 * @author binghe
 * @version 1.0.0
 * @description 线程测试中断
 */
public class InterruptedTask implements Runnable{
 @Override
 public void run() {
 Thread currentThread = Thread.currentThread();
 while (true){
 if(currentThread.isInterrupted()){
 break;
 }
 try {
 Thread.sleep(100);
 } catch (InterruptedException e) {
 e.printStackTrace();
 }
 }
 }
}