关于interrupt,isInterrupted,interrupted()方法

标题所说的三个方法都是Thread类的方法。
均和线程停止有关。jdk早期,停止线程的API是stop方法,由于不安全的因素,jdk1.2开始废弃了该方法,目前该方法已经打上了@Deprecated注解,代表过时
在这里插入图片描述
jdk1.2之后,停止一个线程的方式是:Thread类的interrupt方法。
我先介绍一下两个概念:
当前线程
此线程
在这里插入图片描述
当前线程:执行interuptTest方法的main方法所代表的线程,也就是main线程
此线程:我们自己新建的线程类thread,所代表的线程
interrupt意为打断此线程,即被当前线程创建出来的子线程。并不是真正的停止线程,只是打上了一个中断的标签,并不会真正的停止此线程此线程剩下的代码依旧会继续执行。除非,代码中使用了wait、sleep、park、Condition、Samphore等能响应中断的API
interrupted为查询当前线程的线程状态,在我们上面的代码里也就是指main线程的状态。需要注意的是:如果当前线程被打断,第一次执行该方法会返回true,但是第二次执行会返回false,也就是说连续执行会重置当前线程的状态。
在这里插入图片描述
在这里插入图片描述
如果我们需要保持线程的中断状态,可以在捕获InterruptException,然后手动执行interrupt方法。
Thread.currentThread.interrupt()。该方法会将线程中断状态再次置为true
isInterrupted方法是查询此线程的线程状态。值得注意的是,如果此线程被打断时,正处于非阻塞状态,也就是正常执行代码,那会返回true,但是如果此线程被打断时,正处于阻塞状态,比如正在执行sleep或者join或者wait方法时,这个时候线程被打断的话,isInterrupted会重新被置为false。
下面演示一下阻塞状态和非阻塞状态下的isInterrupted返回的值:
阻塞状态下:
在这里插入图片描述
在这里插入图片描述
非阻塞状态下:
在这里插入图片描述
在这里插入图片描述

总结:interrupt打断此线程
interrupted返回当前线程的状态,连续调用会改变线程状态值
isInterrupted返回此线程的状态,连续调用不会改变线程状态值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值