详解JAVA线程的中断

13 篇文章 0 订阅
7 篇文章 0 订阅

多线程之--2种办法让HashMap线程安全

多线程之--synchronized 和reentrantlock的优缺点

多线程之--2种JAVA乐观锁的比较( NonfairSync VS. FairSync)

多线程之--详解JAVA线程的中断

 

中断线程,并不是直接的中断一个线程,需要依赖于当前线程的状态,有如下几点需要需要注意:

 

1) 除非当前线程中断自己(这个总是被允许的), 否则就会触发checkAccess 这个方法,这样就有可能抛出异常SecurityException .

 

2) 如果线程被Object的方法 wait(), wait(long), or wait(long, int)锁阻塞,或者是被当前线程的方法join(), join(long), join(long, int), sleep(long), or sleep(long, int)所阻塞. 线程的interrupt 状态会被重置,并且收到异常InterruptedException.

 

3) 如果线程被I/O操作( 与 interruptible channel 相关的I/O操作)所阻塞, 那么channel就会被关闭, 线程的interrupt 会被设置, 并且线程也会收到异常ClosedByInterruptException

 

4) 如果线程被Selector所阻塞, 线程的interrupt 状态也会被置位,并且立马从selection 方法返回,返回结果可能并不是0,就好像Selector.wakeup被调用了一样.

 

5) 如果上面几种情况都没用, 那么就对状态interrupt 进行置位.

 

6) 中断一个不是alive的线程是没有任何效果的,比如线程还没有运行run方法,就运行interrupt()是不会有效果的. 线程有多少状态,可以参考java.lang.Thread.State

 

注;上面主要内容翻译至JavaDoc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值