我有一个特定的用例,我需要通过连续调用大约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是否可用于此目的?
答案 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);
}
}