簡體   English   中英

是Thread.sleep(1000); 可靠的東西使用?

[英]Is Thread.sleep(1000); something reliable to use?

我知道Thread.sleep(1000); 可用於凍結當前線程(在示例中為1秒),但由於您需要拋出Exception我想知道它是否可以安全使用它。 我不想在程序中使用它並意外地導致問題。

使用Thread.sleep();是否“正常” Thread.sleep(); 或者有更好的方法來實現相同的結果嗎?

順便說一句,如果你想睡覺並且知道你不會使用中斷,那么避免處理InterruptedExceptions的方便方法是使用Guava的Uninterruptibles,例如

Uninterruptibles.sleepUninterruptibly(1000, TimeUnit.MILLISECONDS);

如果以推薦的方式拋出一個(即重置中斷狀態)並避免難看的try-catch塊,這將透明地處理InterruptedException。

因為你需要拋出異常,我想知道它是否安全使用它。

線程#sleep僅拋出2個異常

  • 如果參數為負,則為IllegalArgumentException
  • InterruptedException ,如果線程被中斷

=>如果傳遞正數並且線程沒有被中斷,則不會有異常。

除非你從另一個線程調用theThread.interrupt() ,否則你會沒事的。

編輯

看起來你想要創建一個計時器 - 在這種情況下,你可以通過使用內置機制讓你的生活更簡單:

Runnable r = new Runnable() {
    public void run() { runYourTaskHere(); }
};
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(r, 0, 1, TimeUnit.SECONDS);

取決於你想要做什么,我已經看到Thread.sleep被使用,它通常用於修復編程錯誤,因為人們認為它解決了競爭條件。 Thread.sleep必須拋出一個異常,因為Java不控制CPU(最后我檢查過),所以如果CPU有錯誤,或者即使它沒有,並提前喚醒一個線程/以某種方式中斷它的程序(Java)需要一種方法來終止自身並將消息傳播到堆棧中。 此外,這在很大程度上取決於你的意思“相同的結果”

這是非常安全的。 JVM已經提供了InterruptedException,以便您可以在需要時處理它(假設您希望在此線程被中斷時執行額外操作)...它實際上並不意味着發生了一些不好的事情。

由於thread.sleep暫停當前​​線程一段時間(不殺死它)。 所以使用它是安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM