基本上,什么的问题标题说。
Thread t = new Thread(someRunnable);
t.start();
t.interrupt();
t.join(); //does an InterruptedException get thrown immediately here?
从我自己的测试,它似乎,只是想确认。 我猜Thread.join()
检查interrupted
做它的“等待”程序之前,该线程的状态?
基本上,什么的问题标题说。
Thread t = new Thread(someRunnable);
t.start();
t.interrupt();
t.join(); //does an InterruptedException get thrown immediately here?
从我自己的测试,它似乎,只是想确认。 我猜Thread.join()
检查interrupted
做它的“等待”程序之前,该线程的状态?
interrupt()
中断你打断线程,而不是线程执行中断。
比照
Thread.currentThread().interrupt();
t.join(); // will throw InterruptedException
是否调用了Thread.interrupt()一个的Thread.join()之前引起join()方法立即抛出一个InterruptedException?
不,它不会抛出。 只有当正在调用当前线程join()
方法被中断将join()
抛出InterruptedException
。 t.interrupt()
被打断,你刚开始线程,而t.join()
将只抛出InterruptedException
如果是做加盟-ING(也许主线程?)线程本身中断。
Thread t = new Thread(someRunnable);
t.start();
t.interrupt();
t.join(); // will _not_ throw unless this thread calling join gets interrupted
此外,它认识到,中断线程没有取消它,是非常重要的join()
是不是像一个Future
,它会返回线程抛出异常。
当您中断一个线程,该线程拨打任何电话到sleep()
wait()
join()
,和其他中断方法将抛出InterruptedException
。 如果这些方法都不能叫那么线程将继续运行。 如果一个线程执行抛出一个InterruptedException
,在响应被打断,然后退出,该异常将丢失,除非你你用t.setDefaultUncaughtExceptionHandler(handler)
。
在你的情况,如果线程被中断,并完成,因为它返回,那么连接将完成 - 它不会抛出异常。 通用线程代码,妥善处理中断如下:
public void run() {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// a good pattern is to re-interrupt the thread when you catch
Thread.currentThread().interrupt();
// another good pattern is to make sure that if you _are_ interrupted,
// that you stop the thread
return;
}
}