我有以下要求。
我正在尝试构建一个模拟器,它将在系统上生成负载以进行负载测试。我希望线程每隔X毫秒开始一次,每个线程将启动一个花费Y毫秒的任务,其中Y可能是2或3个数量级。 X
我以为我可以使用ScheduledExecutorService.scheduleAtFixedRate()。它没有奏效。我看到以下javadoc注释解释了原因:
如果此任务的执行时间超过其周期,那么 后续处决可能会延迟,但不会同时执行 执行。
并发执行正是我想要的。我想在单独的线程中启动很多任务,让他们做任何事情,使用大线程池,并在完成时完成。重点是为测试负载生成负载。
java.util.concurrent中是否有可以让我这样做的东西?我正在阅读这些javadocs,但他们现在正在旋转。
答案 0 :(得分:1)
您可以使用scheduleAtFixedRate(control, 10l, 1l, TimeUnit.SEDONDS)
调度程序创建和执行新任务(在其他线程中),类似于:
final ScheduledExecutorService pool = new ScheduledThreadPoolExecutor(100);
Runnable control = new Runnable()
{
public void run() {
Runnable task = new Runnable() {
public void run() {
// do work here
}
};
pool.execute(task);
};
};
pool.scheduleAtFixedRate(control, 5l, 1l, TimeUnit.SECONDS);