很長一段時間我一直在使用以下功能進行了一段時間當前線程睡眠:這種睡眠實施有什麼問題嗎?
class Utils {
static public sleep(int ms) {
try {
Thread.sleep(ms);
} catch(InterruptedException x) {}
}
}
但因爲我siliently不理我懷疑異常,如果有可能的情況下這個功能將成爲邪惡?
很長一段時間我一直在使用以下功能進行了一段時間當前線程睡眠:這種睡眠實施有什麼問題嗎?
class Utils {
static public sleep(int ms) {
try {
Thread.sleep(ms);
} catch(InterruptedException x) {}
}
}
但因爲我siliently不理我懷疑異常,如果有可能的情況下這個功能將成爲邪惡?
如果你沒有在自己的代碼使用中斷,你應該保持中斷狀態:
catch(InterruptedException x) {
Thread.currentThread.interrupt();
}
,或者您可以通過拋出InterruptedException
對付它上漲。這立即讓呼叫者知道有一箇中斷,否則可以稍後用isInterrupted()進行檢查。
如果您必須全天睡眠,那麼您可以在中斷後繼續睡眠,然後重新中斷線程。請參閱番石榴的Uninterruptibles.sleepUninterruptibly
以實現此目的。
通過不清除線程的中斷狀態,可以防止代碼干擾可能使用中斷的其他任何事情。因此,如果將來您想要中斷某個線程,那麼在有時可以工作的情況下,您不會有晦澀的錯誤,有時甚至不會。
如果你永遠不會使用中斷,可能會完全忽略它,但爲了以防萬一,保持靈活性是很好的。
中斷時,線程將提前喚醒,您將忽略它。 –
當你沒有消息日誌時,處理異常的意義是什麼? – PermGenError
你是否在意睡眠過早中斷?如果沒有,請在catch塊(在{}之間)發表評論來解釋它。如果你照顧,然後處理它。如果您進行大量循環並且睡眠會減慢處理速度,並且出於某種原因睡眠不起作用(例如不斷中斷),那麼這可能會變得很糟糕。可能不太可能的情況。 – xagyg