當過我們在代碼嘗試Threads.sleep,我們必須抓住一個InterruptedException。這意味着該線程在我們指定的時間內無法睡眠,對吧?那麼我們怎麼能讓一個睡覺的線程中斷呢?任何人都能解釋這個概念嗎的Java的Thread.sleep
0
A
回答
2
如何線程被中斷?我可以打電話給Thread.interrupt()。
從here:
中斷是指示一個線程,它應該停止它 正在做和做別的事情。由程序員決定 究竟是一個線程如何響應中斷,但是線程終止的非常常見的是 。這是 課程中強調的用法。
這是值得閱讀this article from JavaSpecialists瞭解如何處理中斷乾淨。
0
Java Concurrency In Practice (Peierls, Bloch, Bowbeer, Holmes, Lea)
例如,如果應用程序被關閉,而這個線程正在睡覺。
0
它可能通過報警或其他外部事件而中斷。
0
的InterruptionException occures,如果線程醒來早於給定的時間。
的Execption只是拋出給你(線程)的選項來處理的特殊情況。
在你不需要趕上這execption最常見的情況。我喜歡小幫手是:
public class Sleeper {
private static final Logger log = Logger.getLogger(Sleeper.class);
/**
* @param time
* @param units
* @return milliseconds
*/
public static long sleepUnsafe(final long time, final TimeUnit units) {
final long start = System.currentTimeMillis();
final long millis = TimeUnit.MILLISECONDS.convert(time, units);
try {
Thread.sleep(millis);
} catch (final InterruptedException e) {
final long end = System.currentTimeMillis();
final long timeSlept = end - start;
final long difference = millis - timeSlept;
if (difference > 0) {
Sleeper.log.warn("should sleep for " + time + " " + units + ". But was awaked after " + (end - start) + " ms. Diffence is " + difference
+ "ms.");
return difference;
}
}
return 0;
}
/**
*
* @param millis
* @return
*/
public static long sleepUnsafe(final long millis) {
return Sleeper.sleepUnsafe(millis, TimeUnit.MILLISECONDS);
}
}
0
正如布萊恩·阿格紐說,在sleep()
例外是反應interrupt()
。這裏的概念是一個線程應該提供方法來阻止自己;如果它不睡覺,它應該通過interrupted()
或isInterrupted()
不時檢查中斷狀態,並作出相應的反應。但是如果線程正在休眠,並且我們想取消它的執行,那麼我們就會註定要失敗:線程只是在睡覺,它不會在意尋找interrupted
標誌。但這就是sleep()
的內置行爲:如果線程在睡眠完成之前中斷,我們將得到一個InterruptedException。
相關問題
- 1. Java Thread.sleep()
- 2. Java Thread.sleep()的實現
- 3. Java Thread.sleep異常
- 4. for循環中的Java Thread.sleep()
- 5. Thread.sleep()的Java性能問題
- 6. Java中的Thread.Sleep替代
- 7. Java Swing Animation without Thread.sleep
- 8. Java多線程thread.sleep()
- 9. Java Thread.sleep long或int?
- 10. 的情景使用的Thread.sleep java的
- 11. Java中的Thread.sleep()的替代方法
- 12. 有沒有在Java中的Thread.Sleep
- 13. java中Thread.sleep()的邏輯是什麼
- 14. 在了Thread.sleep java的時間程序器
- 15. Java的Thread.sleep在這裏會有用嗎?
- 16. Java的三叉戟庫和Thread.sleep()方法
- 17. Java Thread.sleep泄漏線程?
- 18. Thread.sleep()在java中同步
- 19. java定時器和thread.sleep
- 20. Thread.sleep的中斷處理調用Thread.sleep
- 21. Thread.sleep中的InterruptedException()
- 22. LocationListener的用了Thread.Sleep
- 23. 的Thread.Sleep與秒錶
- 24. 畫布中的Thread.sleep
- 25. C#自己的「thread.sleep」
- 26. Thread.Sleep(1)的用途?
- 27. Java使用Thread.sleep()或繼續詢問
- 28. 與Java while循環和Thread.sleep()方法
- 29. 爲什麼Java發送需要Thread.Sleep
- 30. Java - Thread.sleep內部運行方法
你在說什麼?當然不是Java。 –