java - 使用 Java 进行负载测试 - 计时器任务与调度程序

标签 java multithreading performance concurrency load-testing

我需要使用 Java 执行负载测试,其中一种测试策略要求在每 y 时间段内触发 x 个线程,持续 z 分钟,此后在负载测试持续时间内运行的线程总数保持恒定(例如,总共有 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。相反,使用单个 TimerTask,每个时间间隔触发一次,您的示例数字每 5 秒一次。

前 10 次 TimerTask 每次触发,它都会产生 10 个线程。在每次后续触发时,它会检查 Activity 线程的数量,并产生足够多的新线程以使总数达到 100,直到测试结束。

关于java - 使用 Java 进行负载测试 - 计时器任务与调度程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31820555/

相关文章:

java - 在通过 ProcessBuilder 运行的 C 程序中捕获信号

c# - lock(objlocker) 是否使该对象在应用程序范围内线程安全?静态成员是否自动线程安全?

java - 仅在一个 Android Activity 中执行线程

java - 即使在提交响应后线程仍处于 Activity 状态

java - java中的基准测试是否适合比较模算术运算?

iphone - OpenGL ES 中的大滚动背景

java - DialogFragment创建和调用的问题

Java程序输出

sql-server - Microsoft Sync Framework - 性能和可扩展性

java - 以编程方式添加后无法从 JPanel 中删除 JLabel