2017-05-12 32 views
0

我有一個特定的用例,我有10個方法,我需要通過連續調用它們大約5分鐘來進行測試。爲了避免加載處理這些調用的後端,我計劃在每個方法調用之間有一秒的延遲。在調用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 
    } 
} 

我想知道是否有引進的延遲,而不是每一個方法調用後使用Thread.sleep()方法更好的方法。我不確定ScheduledExecutorService是否可以用於此目的?

+0

假設Quartz調度可以在這個問題上也可以使用。 [this](https://www.mkyong.com/tutorials/quartz-scheduler-tutorial/)是一個很好的例子,讓你開始。 –

+0

我更喜歡Thread.sleep方法,因爲確實沒有需要發生的併發。但是我會將這些方法放入一個列表中,並在遍歷列表時在迭代之間進行休眠。 – Aarjav

回答

0

我有一個具體的用例,我有10個方法,我需要測試通過連續調用它們大約5分鐘。爲了避免加載處理這些調用的後端,我計劃在每個方法調用之間有一秒的延遲。

爲此,我沒有看到需要安排。你可以簡單地循環n時間和調用之間的一些睡眠的方法:

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

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

取決於您正在尋找的精度。

對於所有實際的目的,睡眠很好。這實際上是把線程休眠了一段時間,同時這個過程還在做其他的事情。

一個更穩健的任務調度方法通常是ScheduledExecutorService,所以您可能需要考慮這一點。

然而,你的代碼不是很好,你基本上是枚舉方法調用。考慮使用具有一定偏移量的多個調度程序(即,在不同的時間啓動它們,以便任務不重疊,這樣您就不需要在任務內休眠)。