引入在java中调用一组方法之间的延迟

时间:2017-05-12 23:09:56

标签: java

我有一个特定的用例,我需要通过连续调用大约5分钟来测试10个方法。为了避免加载处理这些调用的后端,我计划在每次方法调用之间有一秒钟的延迟。

我的代码看起来像这样:

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是否可用于此目的?

2 个答案:

答案 0 :(得分:0)

取决于您所寻求的精确度。

出于所有实际目的,睡眠很好。它确实让线程在一段时间内处于睡眠状态,同时这个过程正在做其他事情。

一般来说,一种更强大的任务调度方法是ScheduledExecutorService,因此您可能需要考虑这一点。

然而,对你的代码来说不太好的是你基本上枚举了方法调用。考虑使用具有一些偏移量的多个调度程序(即,在不同时间启动它们,使得任务不重叠,使得您不需要在任务内部睡眠)。

答案 1 :(得分:0)

  

我有一个特定的用例,我需要通过连续调用大约5分钟来测试10个方法。为了避免加载处理这些调用的后端,我计划在每次方法调用之间有一秒钟的延迟。

为此,我没有看到安排的必要性。您可以简单地循环n次并在两者之间调用方法调用方法:

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

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