当前位置: 代码迷 >> 综合 >> 对线程interrupt的初浅理解
  详细解决方案

对线程interrupt的初浅理解

热度:102   发布时间:2023-09-05 17:41:58.0

  在java中,使用interrrupt可以用来请求中止线程。对一个线程调用interrrupt方法时,该线程的中断状态位被置位,每个线程不断访问自己的这个标志,以判断线程是否被中断(只是要求java开发者去添加的判断,并不在内部实现)。可以调用Thread的方法isInterrupted判断是否线程中断,代码如下:


//5s后interrup请求打印一个异常
public class Main {public static void main(String[] args) {Thread thread = new Thread(() -> {while (!Thread.currentThread().isInterrupted()) {System.out.println("Hello World");}});thread.start();try {Thread.sleep(5000);thread.interrupt();} catch (InterruptedException e) {e.printStackTrace();}}
}

线程在5s后得到中断请求,中断。停止打印。

如果线程被阻塞,处于sleep或wait状态,则在请求该线程中断时,会抛出InterruptedException,代码如下:


//5s后interrup请求打印一个异常
public class Main {public static void main(String[] args) {Thread thread = new Thread(()->{while(!Thread.currentThread().isInterrupted()){try {Thread.currentThread().sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("Hello World");}});thread.start();try {Thread.sleep(5000);thread.interrupt();} catch (InterruptedException e) {e.printStackTrace();}}
}

 

  相关解决方案