java InterruptedException 的价值

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

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 的状态。


  

你可能感兴趣的:(java,thread,工作)