我正在運行一個線程,其主要操作是使用阻塞函數調用代理,然後等待它給它一些東西。中斷等待阻塞操作的線程?
我用揮發性布爾和中斷已知的模式,但我不知道它會工作:當我試圖添加一個catch塊爲InterruptedException
,我得到的錯誤:
Unreachable catch block for InterruptedException. This exception is never thrown from the try statement body
所以如果我永遠不會得到InterruptedException
,這意味着我永遠不會走出阻塞行動 - 因此永遠不會停止。
我有點困惑。任何想法?
public void run() {
Proxy proxy = ProxyFactory.generateProxy();
Source source;
while (!isStopped) {
try {
source = proxy.getPendingSources();
scheduleSource(source);
} catch (Exception e) {
log.error("UnExpected Exception caught while running",e);
}
}
}
public void stop() {
this.isStopped = true;
Thread.currentThread().interrupt();
}
謝謝!這花了我幾分鐘,但我意識到我在「停止」方面做了什麼錯誤。 在這種情況下,如果線程將得到「停止」請求,它將停止等待阻止操作? – Yossale 2009-11-30 15:55:35
或者更好的只是使用一個易變的布爾值標記停止。 – 2009-11-30 16:10:47
@Tom如果scheduleSource()或proxy.getPendingSources()被封鎖了怎麼辦?我假設他會希望這個調用被stop()中斷() – Kevin 2009-11-30 16:13:31