2017-05-12 5 views
0

私は約5分間連続して呼び出すことでテストが必要な10のメソッドがある特定の使用例があります。これらの呼び出しを処理するバックエンドの読み込みを避けるために、私は各メソッド呼び出しの間に1秒の遅延を持つことを計画しています。私はむしろ、すべてのメソッド呼び出しの後のThread.sleep()を使用するよりも遅延を導入するためのより良い方法があるかどうかを知りたいと思ったJavaで一連のメソッドを呼び出す間に遅延を導入する

public static void main(String[] args) 
{ 
    for (int i = 1; i <= 10; i++) // start i at 1 for initial delay 
    { 
     Timer timer = new Timer(); 
     timer.schedule(new TimerTask() { 
      public void run() 
      { 
       callMethodA(); 
       Thread.sleep(1000); 
       callMethodB(); 
       Thread.sleep(1000); 
       callMethodC(); 
       Thread.sleep(1000); 
       callMethodD(); 
       Thread.sleep(1000); 
       callMethodE(); 
       Thread.sleep(1000); 
       callMethodF(); 
      } 
     }, 30000 * i); // 5 second intervals 
    } 
} 

私のコードは次のようなもののように見えます。この目的のためにScheduledExecutorServiceを使用できるかどうかはわかりませんでしたか?

+0

:あなたは、単にループn回とは、間にいくつかの睡眠を持つメソッドを呼び出すことができます。 [this](https://www.mkyong.com/tutorials/quartz-scheduler-tutorial/)は、あなたを始めるための良い例です。 –

+0

私はThread.sleepアプローチがより好きです。なぜなら、実行する必要のある同時実行性がないからです。しかし、私はメソッドをリストに入れ、リストをループするときに繰り返しの間スリープします。 – Aarjav

答えて

0

私には、約5分間連続して呼び出すことでテストが必要な10のメソッドがある特定の使用例があります。これらの呼び出しを処理するバックエンドの読み込みを避けるために、私は各メソッド呼び出しの間に1秒の遅延を持つことを計画しています。

この目的のために、私はスケジューリングの必要性を見ません。クォーツスケジューラはまた、この問題で使用することができたとし

Runnable[] calls = { 
     () -> callMethodA(), 
     () -> callMethodB(), 
     // ... 
}; 

for (int i = 0; i < 5; i++) { 
    for (Runnable runnable : calls) { 
     runnable.run(); 
     Thread.sleep(1000); 
    } 
} 
0

あなたが探している精度に依存します。

すべての実用的な目的のために、睡眠は正常です。それはかなり文字通りスレッドをある程度の時間スリープ状態にしており、プロセスはその間に他の作業をしています。

タスクスケジューリングのより堅牢なアプローチは一般的にScheduledExecutorServiceです。代わりにそれを考慮する必要があります。

しかし、あなたのコードについてはあまりよくありませんが、基本的にはメソッド呼び出しを列挙しています。いくつかのオフセットを持つ複数のスケジューラを使用することを検討してください(タスクがタスク内でスリープする必要がないようにタスクが重複しないように異なる時間に開始する)。

関連する問題