对于如何有效处理interruptException异常,
参见大湿Brian Goetz:http://www.ibm.com/developerworks/cn/java/j-jtp05236.html
http://agapple.iteye.com/blog/970055
再贴上简单代码演示interruptException异常如何发生?
public class InterruptCause {
public static void main(String[] args) {
InterruptCause itc = new InterruptCause();
InterruptThread interuptThread = itc.new InterruptThread();
interuptThread.start();
try {
Thread.sleep(2000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
interuptThread.interrupt();
System.out.println("没有什么?");
}
class InterruptThread extends Thread{
@Override
public void run() {
System.out.println("线程名称:"+Thread.currentThread().getName());
try {
Thread.sleep(3000L);
//Thread.sleep(1000L);//两种方式导致结果是不一样的
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
对于睡眠3s,还是1s是针对main主线程的2s而设置,如果睡眠3s则会出现interruptException异常,而1s是不会发生 的,是因为3s会导致主线程优先执行interrupt方法导致的!