安排相同的任务 500 次

Schedule the same task for 500 times

我有一个任务想运行并行执行500次,如果我想运行它只执行一次,我会做这样的事情

Executors.newSingleThreadScheduledExecutor().scheduleWithFixedDelay(
            taskProvider.get(),
            0,
            100,
            TimeUnit.MILLISECONDS
        );

我想 运行 我从任务提供者那里以固定速率并行获得 500 个任务(高 IO),有没有办法在一段时间内不创建 500 个执行程序或提交 500 个任务来执行此操作循环?

编辑:我知道我可以创建一个大小为 500 的线程池,如果我这样做,我将不得不向 运行 他们并行提交 500 个任务(?),我正在寻找是否有无需提交类似任务的方法,因为基本上它们具有相同的内容,我也不想同时启动所有这些任务,我想每 100 毫秒启动 50 个。

您可以创建大小为 500 的任务列表并使用

ExecutorService executor = Executors.newFixedThreadPool(500);
executor.invokeAll(tasks);

您必须手动执行此操作:

void submitTaskChunks(int chunkCount, int chunkSize, long delayMillis) throws InterruptedException {
    ExecutorService executorService = Executors.newCachedThreadPool();

    for (int i = 0; i < chunkCount; i++) {
        List<Callable<Void>> taskChunk = IntStream.range(0, chunkSize)
                .mapToObj(k -> taskProvider.get())
                .collect(Collectors.toList());

        executorService.invokeAll(taskChunk);
        Thread.sleep(delayMillis);
    }

    executorService.shutdown();
    executorService.awaitTermination(1, TimeUnit.MINUTES);
}

每 100 毫秒提交 50 个任务 10 次: submitTaskChunks(10, 50, 100); 请注意 taskProvider.get 应该 return Callable<Void>.