gpt4 book ai didi

java - 在 Java 中执行简单异步任务的最佳方式?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:32:31 27 4
gpt4 key购买 nike

我想异步调用一个独立于主线程执行某些操作的函数。我是 Java 并发的新手,所以我问执行这样的操作的最佳方法是什么:

for(File myFile : files){
MyFileService.resize(myfile) <--- this should be async
}

当函数 MyFileService.resize 在后台处理集合中的每个文件时,while 循环继续进行。

我听说 Java8 中的 CompletionStage 可能是实现此目的的好方法。什么是最好的方法?

最佳答案

Future怎么样?在 Java8 中,示例:

for(File myFile : files){
CompletableFuture.supplyAsync(() -> MyFileService.resize(myfile))
}

对于 CompletableFuture.supplyAsync 默认将使用 ForkJoinPool common pool ,默认线程大小为:Runtime.getRuntime().availableProcessors() - 1,您也可以通过以下方式修改:

  1. System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", size)
  2. Djava.util.concurrent.ForkJoinPool.common.parallelism=size

您还可以将 supplyAsync 方法与您自己的 Executor 结合使用,比如:

ExecutorService executorService = Executors.newFixedThreadPool(20);
CompletableFuture.supplyAsync(() -> MyFileService.resize(myfile), executorService)

关于java - 在 Java 中执行简单异步任务的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41057655/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com