线程中断

作者: 糯米团子123 | 来源:发表于2022-12-06 17:59 被阅读0次
  1. 什么是线程中断?
    线程中断即线程运行过程中被其他线程打断了。

  2. 线程中断的重要方法
    2.1 java.lang.Thread.interrupt()
    中断目标线程,给目标线程发一个中断信息,线程被打上中断标记

    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(()->{
            while (true){
                Thread.yield();
            }
        });
        thread.start();
        thread.interrupt();
    }
    

    此时线程不会被中断,因为只给线程发送了中断信号但是程序中并没有响应中断信号的逻辑,所以程序不会有任何反应。
    2.2 java.lang.Thread.isInterrupted()
    判断目标线程是否被中断,不会清除中断信号

      Thread thread = new Thread(()->{
            while (true){
                Thread.yield();
                // 响应中断
                if(Thread.currentThread().isInterrupted()){
                    System.out.println("线程中断,程序退出。。。。");
                    return;
                }
            }
        });
        thread.start();
        thread.interrupt();
    

    此时线程会被中断,Thread.currentThread().isInterrupted()检测到线程被打了中断信号,程序打印出信息后返回,中断成功。
    2.3 java.lang.Thread.interrupted()
    判断目标线程是否被中断,会清除中断信号

  3. 其他示例
    3.1 中断失败

     Thread thread = new Thread(()->{
            while (true){
                Thread.yield();
                if(Thread.currentThread().isInterrupted()){
                    System.out.println("线程中断,程序退出。。。。");
                    return;
                }
    
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    System.out.println("线程休眠被中断,程序退出。。。。");
                }
            }
        });
        thread.start();
        Thread.sleep(1000);
        thread.interrupt();
    

    此时会打印出:“线程休眠被中断,程序退出。。。。”,但程序会继续运行。
    原因:sleep()方法中断后会清除中断标记,所以循环继续执行。


    sleep().png

    3.2 中断成功

     Thread thread = new Thread(()->{
            while (true){
                Thread.yield();
                if(Thread.currentThread().isInterrupted()){
                    System.out.println("线程中断,程序退出。。。。");
                    return;
                }
    
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    System.out.println("线程休眠被中断,程序退出。。。。");
                    Thread.currentThread().interrupt();
                }
            }
        });
        thread.start();
        Thread.sleep(1000);
        thread.interrupt();
    

    打印出:“线程休眠被中断,程序退出。。。。”和“线程中断,程序退出。。。。”线程中断成功。
    在sleep()方法被中断清除标记后手动重新中断当前线程,循环接收到中断信号返回退出。

相关文章

  • 泥瓦匠聊并发编程基础篇:线程中断和终止

    1 线程中断 1.1 什么是线程中断? 线程中断是线程的标志位属性。而不是真正终止线程,和线程的状态无关。线程中断...

  • 阿里P8聊并发编程:线程中断和终止

    一、线程中断 1.什么是线程中断? 线程中断是线程的标志位属性。而不是真正终止线程,和线程的状态无关。线程中断过程...

  • 【多线程】——3.线程的中断

    线程中断的概念 java线程中断是一种协作机制 通过中断并不能直接终止线程的运行 需要被中断的线程自己处理中断 (...

  • 8.3 线程控制

    线程中断 方法:void interrupt():中断线程(本质没有中断操作,只是给线程对象加了个标记,设置其中断...

  • Java并发编程基础-理解中断

    章节 什么是中断 中断线程的方法 线程中断状态的判断以及何时被中断的线程所处 isInterrupted() 状态...

  • Java线程及多线程相关

    多线程 中断 每个线程都有一个boolean类型的中断状态。当在另一个线程中断该线程时,这个线程的中断状态将被设置...

  • (4)线程中断

    什么是线程中断 java中的线程中断并不是指强制线程中断执行,而是指调用线程中断起到一个通知作用,让线程知道自己被...

  • 7 什么是线程中断

    线程中断 线程中断指的是线程的一种状态,中断不是自发产生的,而是其它线程发出的一种指令.本线程通过判断是否接收中断...

  • 线程中断

    什么是线程中断?线程中断即线程运行过程中被其他线程打断了。 线程中断的重要方法2.1 java.lang.Thre...

  • 线程方法

    1.实例方法t1.interrupt()中断线程 线程中断并不会立即使线程退出,告知目标线程中断(设置中断标识位,...

网友评论

    本文标题:线程中断

    本文链接:https://www.haomeiwen.com/subject/gxjifdtx.html