2016-05-24 238 views
2

我試圖通過20次嘗試每循環睡眠3000毫秒來限制循環中進程的嘗試到60秒。調用Thread.sleep()並不是在正在運行的線程中暫停執行,相反,所有20次嘗試都是連續發生的。Thread.sleep()不會暫停執行

private void pollWebServiceForToken() { 
    final int pollInterval = 3000; 
    new Thread() { 
     @Override 
     public void run() { 
      int attempts = 0; 
      int maxAttempts = 60; 
      String token; 
      do { 
       token = requestToken(exchangeCode); 
       if (token.contains(FAILED)) { 
        try { 
         Thread.sleep(pollingInterval); 
        } catch (InterruptedException ex) { 
         this.currentThread().interrupt(); 
        } 
       } 
       attempts++; 
      } while (token.toLowerCase().contains(FAILED) && attempts < maxAttempts && !cancelled); 
     } 
    }.start(); 
} 

由於這一切發生一個Vaadin應用裏面,我假設錯誤的線程被置於睡眠狀態,但我不知道如何針對特定線程睡眠。

在此先感謝

+0

InterruptedException是否發生? – Buddy

+0

不,它幾乎立即運行了所有20次嘗試=/ –

+0

在InterruptedException catch接口處理程序中中斷當前線程究竟是什麼? – EJP

回答

1

確定的代碼,如果正在運行裏面?時間的條件不同(+ toLowerCase)。 Thread.sleep()總是導致當前線程休眠。

+0

Yikes,這很令人尷尬。感謝您爲了這樣一個愚蠢的疏忽節省了我一個小時! –