interrupt方法点滴记录

本文详细解析了Java中线程的中断机制,包括sleep、wait及join方法如何响应中断请求,并探讨了中断状态标志的作用及其触发InterruptedException的机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[color=blue]1、sleep方法与interrupt方法[/color]

假如线程A像下面这样,使用线程的sleep()方法暂停着.
[code]Thread.sleep(10000);[/code]这时候线程B,会执行下面的语句,要求B放弃等待操作.
[code]a.interrupt(); //a是线程A的实例[/code]
在这里使用的interrupt方法,是Thread类的实例方法.执行interrupt方法时,并不需要获取Thread实例的锁定.任何线程在任何时刻,都可以调用其他线程interrupt方法.
当sleep中的线程被调用interrupt方法时,就会放弃暂停的状态.并抛出InterruptedException.丢出异常的,是A线程.
[color=blue]
2、wait方法与interrupt方法[/color]
当线程A以wait方法等待时,与sleep一样可以取消.使用interrupt方法,可以对wait中的线程传达"不用等notify了,从等待区出来"的意图.
线程B执行下面的语句后,与sleep时一样,线程A会抛出InterruptedException异常.
[code]a.interrupt();[/code]
当线程wait时,要小心锁定的问题.线程在进入等待区,会把锁定解除,当对wait中的线程调用interrupt时,会先重新获取锁定,再抛出异常.在获取锁定之前,是无法抛出异常的.
[color=blue]
3、Join方法与interrupt方法[/color]
当线程以join方法等待其他线程结束时,一样可以使用interrupt方法取消之.因为调用join方法不需要获取锁定,故与sleep时一样,会马上跳到catch块里.

[color=blue]4、interrupt方法只是改变中断状态而已[/color]
线程A在执行sleep,wait,join时,线程B调用A的interrupt方法,的确这一个时候A会有InterruptedException异常抛出来.但这其实是在sleep,wait,join这些方法内部会不断检查中断状态的值,而自己抛出的InterruptedException。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值