有效的Java(第275頁),有這樣的代碼段:爲什麼要捕獲InterruptedException來調用Thread.currentThread.interrupt()?
...
for (int i = 0; i < concurrency; i++) {
executor.execute(new Runnable() {
public void run() {
ready.countDown();
try {
start.await();
action.run();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} finally {
done.countDown();
}
}
}
...
什麼用捕獲中斷異常,只是爲了重新提高呢?爲什麼不讓它飛呢?
假設您希望線程實際中斷。你可以捕捉併吞下異常,這將抑制線程中斷。 – 2009-12-13 08:26:09
你的意思是它不在Runnable的簽名中。我會使用Callable來代替。另外 - 調用Thread.currentThread()。interrupt()不會拋出異常?那麼投擲它有什麼意義? – ripper234 2009-12-13 08:48:08
我相信你的意思是'InterruptedException'是一個檢查的異常,不在'Runnable.run()'(而不是'Executor.execute')的簽名中。 – Tom 2009-12-13 08:51:13