interrupt方法详解

interrupt虽然是打断线程的方法,但不会立即结束线程运行,而是将线程的打断状态设置为true,在线程的isInterrupted方法来查看打断状态。

作用:打断线程。

        1、打断处于阻塞状态的线程。

        2、打断正在运行的线程。

注意:     

         1.当使用interrupt()方法去打断处于阻塞状态的线程时,会以异常的方式打印,而不会更新打断标记,因此,虽然被打断,但是打断标记依然为false。此时就需要在try catch异常捕获处再次调用interrupt()方法,就会使打断状态为true,优雅结束线程运行。

        2.当使用interrupt()方法去打断正在运行线程时,被打断的线程会继续运行,但是该线程的打断标记会更新,更新为true,因此可以根据打断标记来作为判断条件使得线程停止。

1.打断 sleep,wait,join 的线程

打断 sleep 的线程, 会清空打断状态

        sleep()、wait()、join()调用者三个方法可以使得线程阻塞,线程阻塞之后,cpu是不会分配时间片的

 

2.打断正常运行的线程

打断正常运行的线程, 不会清空打断状态

 

3.打断 park 线程

打断 park 线程, 不会清空打断状态。

// 暂停当前线程

LockSupport.park();

// 恢复某个线程的运行

LockSupport.unpark(暂停线程对象)

当线程在运行中,执行到park,此时线程暂停运行。

  1. park 中的线程,处于 WAIT 状态
  2. unpark 既可以在 park 之前调用或之后调用,都是用来恢复某个线程的运行,简单的说,调用 unpark 后再调用 park 线程依然不会暂停,类似提前“解毒”。
  3. 不论提前unpark多少次,只有第一次有效.

 注意:如果打断标记已经是true,后续park将会失效

可以使用 Thread.interrupted() 清除打断状态。

 

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓风残月Lx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值