首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >把相同的任务安排500次

把相同的任务安排500次
EN

Stack Overflow用户
提问于 2018-01-04 07:56:08
回答 2查看 93关注 0票数 0

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

代码语言:javascript
复制
Executors.newSingleThreadScheduledExecutor().scheduleWithFixedDelay(
            taskProvider.get(),
            0,
            100,
            TimeUnit.MILLISECONDS
        );

我想运行我从任务提供者获得的500个任务(高IO),与固定速率并行,是否有一种方法可以做到这一点,而不创建500个执行者或提交500个任务在一个时间循环?

编辑:我知道我可以创建一个大小为500的线程池,如果我这样做,我必须提交500个任务(?)为了并行运行,我在寻找一种不提交类似任务的方法,因为它们基本上都有相同的内容,我也不想同时启动它们,我希望每100 is启动50次。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-04 08:58:46

您必须手动完成此操作:

代码语言:javascript
复制
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 ms提交50个任务10次:submitTaskChunks(10, 50, 100);注意到taskProvider.get应该返回Callable<Void>

票数 1
EN

Stack Overflow用户

发布于 2018-01-04 08:36:48

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

代码语言:javascript
复制
ExecutorService executor = Executors.newFixedThreadPool(500);
executor.invokeAll(tasks);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48090946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档