JAVA 线程中断之isInterrupted(),interrupt() ,interrupted()

isInterrupted()

Thread 方法 :返回会boolean 值,为Thread的中断状态
底层是通过调用本地方法实现 。
isInterrupted()仅会返回中断状态,不会清除中断标
在这里插入图片描述

interrupt()

无返回值, 会调用nio的方法,以及本地方法中断线程,
线程中断的后并不会马上停止,而是会继续执行完
interrupt()只是将中断标识位置为true
注意:线程中断仅仅是设置线程的中断状态位,不会停止线程。需要用户自己去监视线程的状态为并做处理。这里可以看到中断后该线程还在继续往下执行,并没有强制终止线程
在这里插入图片描述

interrupted()

返回:boolean类型, 会清空中断标记
如果线程是中断状态返回,则会返回true,并清空中断标记
第二次调用则返回false;
在这里插入图片描述
代码:

package com.ljq.mydemo.thread.Interrup;

/**
 * @author gino
 * 2021-11-30
 */
public class Interrupt {
    public static void main(String[] args) {
        Thread t = new Thread(new Worker());
        t.start();

        try {
            Thread.sleep(5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        t.interrupt();
        System.out.println("Main thread stopped.");
    }

    public static class Worker implements Runnable {

        @Override
        public void run() {
            System.out.println("Worker started.");
            boolean f; // 用于检测interrupted()第一次返回值
            int i = 0;
            Thread c = Thread.currentThread();
            System.out.println("while之前线程中断状态isInterrupted():" + c.isInterrupted());
            while (!(f = Thread.interrupted())) {// 判断是否中断,如果中断,那么跳出并清除中断标志位
                // 一旦检测到中断,interrupted()第一次返回true,就可以跳出循环,第二次以及以后都是返回false
                System.out.println("while内,还没中断,interrupted()返回值为:" + f);
                System.out.println(c.getName() + "  " + i++ + "  " + c.isInterrupted());
            }
            System.out.println("跳出循环即第一次中断interrupted()返回值:" + f);
            System.out.println("while之后线程中断状态isInterrupted():" + c.isInterrupted()); // 为false,因为interrupt()会清除中断标志位,显示为未中断
            System.out.println("第二次及以后的interrupted()返回值:" + Thread.interrupted());
            c.interrupt();
            System.out.println("再次中断后查询中断状态isInterrupted():" + c.isInterrupted());
            System.out.println("Worker stopped.");
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值