Java线程中interrupt,看一个例子都懂了

    Thread类中有3个与interrupt相关的方法,像三胞胎一样,初学者傻傻分不清楚,举了个例子,看完就懂。

直接上代码,看注释。

public class InterruptTaskTest {

    public static void main(String[] args) {
        System.out.println(Thread.currentThread() + " isInterrupted() 1: " + Thread.currentThread().isInterrupted());  // 初始false

        Thread.currentThread().interrupt(); // 执行后true
        System.out.println("--interrupt() 1"); // 无异常产生
        System.out.println(Thread.currentThread() + " isInterrupted() 2: " + Thread.currentThread().isInterrupted());

        Thread.interrupted();  // 执行后false,重置了状态
        System.out.println("++++++interrupted() 1");
        System.out.println(Thread.currentThread() + " isInterrupted() 3: " + Thread.currentThread().isInterrupted());

        InterruptTask task = new InterruptTask(3000); // 定时延迟3秒后,对当前线程interrupt()

        while (!Thread.interrupted()) { // 这时为false可以进入循环
            try {
                TimeUnit.SECONDS.sleep(2);
            } catch (InterruptedException e) {
                System.out.println("--interrupt() 2,异常信息:" + e.getMessage());  // 对sleep状态线程中断有异常
                System.out.println(task.target + " isInterrupted() 4: " + task.target.isInterrupted()); // 这时还为fasle,中断sleep线程特殊
                Thread.currentThread().interrupt();  // 必须在interrupt()一次,才能跳出循环
                System.out.println("--interrupt() 3"); // 无异常产生
                System.out.println(task.target + " isInterrupted() 5: " + task.target.isInterrupted()); // 这时为true,终止后面循环
            }
        }

        task.cancel();
        System.out.println("over!");
    }
}

代码在jdk1.8执行结果:

Thread[main,5,main] isInterrupted() 1: false
--interrupt() 1
Thread[main,5,main] isInterrupted() 2: true
++++++interrupted() 1
Thread[main,5,main] isInterrupted() 3: false
--interrupt() 2,异常信息:sleep interrupted
Thread[main,5,main] isInterrupted() 4: false
--interrupt() 3
Thread[main,5,main] isInterrupted() 5: true
over!

有帮助到你的话,敲个👍。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值