У меня есть следующее требование.
Я пытаюсь создать симулятор, который будет генерировать нагрузку на систему с целью тестирования нагрузки. Я хочу, чтобы потоки начинались каждые X миллисекунд, каждый из которых запускает задачу, которая занимает Y миллисекунды, причем Y может быть на 2 или 3 порядка> X.
Я думал, что могу использовать ScheduledExecutorService.scheduleAtFixedRate(). Это не сработало. Я вижу следующий комментарий javadoc, который объясняет, почему:
Если какое-либо выполнение этой задачи занимает больше времени, чем ее период, последующие исполнения могут начинаться с опоздания, но не будут выполняться одновременно.
Одновременное выполнение - именно то, что я хочу. Я хочу начать много задач в отдельных потоках, позволить им делать то, что они делают, с большим пулом потоков и заканчивать, когда они заканчиваются. Дело в том, чтобы генерировать нагрузку для тестирования нагрузки.
Есть ли что-нибудь в java.util.concurrent, которое позволит мне это сделать? Я читаю эти джавадоки, но теперь они поворачивают голову.
Вы можете использовать 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);