java InterruptedException 的价值

[b]这里谈java 中的InterruptedException ,主要对如下让人迷惑的问题进行探讨:[/b]
[b]1: 什么情况下出现InterruptedException 这个异常 [/b]
[b]2: 出现这个异常有什么的目的[/b]

InterruptedException 是个检查异常,在出现Thread.sleep() 和 Object.wait() 这类方法时候,编译器会要求捕捉并处理。Tread.sleep(),Object.wait() 这些都是阻塞方法,使当前线程阻塞等待外部事件(时间片,锁等),暂且把此阻塞线程名为Thread1; 那么现在有另外一个线程Thread2 请求退出程序了,毕竟最好的方法就是要通知一下那些阻塞的线程,让他们进行自我未完成的东西处理一下,Thread2这时候会使用 Thread.interrupt() 中断Thread1这个线程时 ,这时候 Thread1中就会出现 InterruptedException 异常。其实这种异常就是一种友善的通知,至于怎么处理就看实际业务情况了和代码设计结构了。这个异常也是 可以取消阻塞这种功能产生的结果,所谓可取消阻塞也就是说不一定等阻塞完毕后才能往下执行,完全可以通过外力取消阻塞。

当一个线程中断另一个线程时,被中断的线程不一定要立即停止正在做的事情。如果那个线程在执行一个低级可中断阻塞方法,例如Thread.sleep() ,Object.wait(),那么它将取消阻塞并抛出 InterruptedException,这个时候需要程序员处理了,或者不管它可以继续再做一个阻塞,或者别的善后工作;但是还有别的线程无法被中断,可能优先级别很高等,这个时候被中断的线程依然可以通过Thread.isInterrupted()来读取是否有别人请求中断过本线程,并且可以通过一个名为 Thread.interrupted()的操作读取和清除这个isInterrupted 的状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值