2016-05-24 10 views
2

私はループ内のプロセスの試行をループごとに3,000msのスリープで20秒間で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'キャッチハンドラで現在のスレッドを中断する点は正確に何ですか? – EJP

答えて

1

if内部のコードは実行されていますか? whileの条件は異なります(+ toLowerCase)。 Thread.sleep()は常に現在のスレッドをスリープさせます。

+0

Yikes、恥ずかしいです。このような愚かな監督のためにもう1時間節約してくれてありがとう! –

関連する問題