2012-12-31 11 views
3

我想調用Thread.sleep,並傳播InterruptException如果確實是拋出。有沒有簡單的方法來調用睡眠和傳播異常

虛語法:

Interruptibles.sleep(1000); 

這相當於

try { 
    Thread.sleep(1000); 
} catch (InterruptException e) { 
    throw Throwables.propagate(e); 
} 

是否有一個共同的庫(番石榴,apache的公地等)類似的功能。

+10

如何不趕上它? – Henry

+2

@亨利和污染整個來源與檢查的異常?不,謝謝你的朋友。 – HBase

+2

+1用於檢查異常污染整個來源。所有Java內置併發庫都有一個原因。 –

回答

3

你可以這樣做。

try { 
    Thread.sleep(1000); 
} catch (InterruptException e) { 
    Thread.currentThread().interrupt(); 
} 

try { 
    Thread.sleep(1000); 
} catch (InterruptException e) { 
    Thread.currentThread().stop(e); 
} 

但是通常最好讓異常「冒泡」到什麼地方可以正確地處理它。您的IDE可以通過填寫您需要的代碼來實現這一點。

+2

+1,以便正確響應中斷。 –

+2

閱讀http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html瞭解更多關於這方面的信息。感謝路易斯提供此鏈接。 – JustinKSU

+1

+1「Java理論與實踐:處理InterruptedException」。我也建議http://www.javaspecialists.eu/archive/Issue146.html和http://www.javaspecialists.eu/archive/Issue056.html – superfav

9

在RuntimeException中換行很可能會導致系統崩潰。 這是一個複雜的話題,我推薦Java併發實踐中的相關部分來充分理解你的選擇。
番石榴有sleepUninterruptibly它實現了其中描述的標準習語之一。

+0

閱讀了JCIP的相關部分,我仍然沒有看到這一點。你能給我更多的指針嗎? – HBase

相關問題