我需要使用Java进行负载测试,其中一种测试策略需要在z分钟内每y段时间启动x个线程,并在负载测试持续时间内保持恒定的totalThread线程数量(例如,使用100个线程,以5秒间隔启动10个线程,直到所有100个线程都启动,并继续保持所有100个线程运行(执行完后应重新开始)指定的测试持续时间,比如一个小时)。
我尝试使用计时器任务,但似乎有限制,线程池调度程序是更好的选择吗?最好的方法是什么?
我尝试使用计时器任务,但似乎有限制,线程池调度程序是更好的选择吗?最好的方法是什么?
public class MyTask extends TimerTask{
public void run() {
System.out.println("STARTING THREAD "+ counter +" "+ new Date());
//execute test
counter++;
if (counter > maxIterations) {
MyTask.this.cancel();
return;
}
}
List<TimerTask> MyTaskList = new ArrayList<TimerTask>();
for (int i = 1 ; i <= threadsPerIteration ; i++) {
TimerTask MyTimerTask = new MyTask(NumberOfIterations);
MyTaskList.add(MyTimerTask);
timer.schedule(MyTimerTask, initialDelayMilli, threadDelayMilli);
}
谢谢
TimerTask
使用专用线程,因此它可能会很昂贵(创建、上下文切换),而ScheduledExecutorService
则将消息传递给(可能处于活动状态的)等待线程。我认为这样更可预测。不过最好使用 gattling。 - Ben Manes