安排相同的任务 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>
.
我有一个任务想运行并行执行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>
.