InterruptedException与interrupt()方法
什么情况下会抛出Interrupted异常
假设while循环中没有调用任何的阻塞函数,就是通常的算术运算,或者打印一行日志,如下所示。
public class MyThread extends Thread {
@Override
public void run() {
while (true) {
boolean interrupted = isInterrupted();
System.out.println("中断标记:" + interrupted);
}
}
}
这个时候,在主线程中调用一句thread.interrupt(),请问该线程是否会抛出异常?不会。
public class Main {
public static void main(String[] args) throws InterruptedException {
MyThread42 myThread = new MyThread42();
myThread.start();
Thread.sleep(10);
myThread.interrupt();
Thread.sleep(100);
System.exit(0);
}
}
只有那些声明了会抛出InterruptedException的函数才会抛出异常,也就是下面这些常用的函数:
public static native void sleep(long millis) throws InterruptedException
{...}
public final void wait() throws InterruptedException {...}
public final void join() throws InterruptedException {...}