- 策略一:合理控制并行度
- 适用场景:当任务数量较多且系统资源有限时,若并行度过高,会导致线程上下文切换频繁,降低性能。此时可根据系统资源(如CPU核心数)来合理设置并行度。
- 代码示例:
import java.util.concurrent.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class CompletableFutureParallelism {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
CompletableFuture<Void> allFutures = CompletableFuture.allOf(IntStream.range(0, 10)
.mapToObj(i -> CompletableFuture.supplyAsync(() -> {
// 模拟任务
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
return i;
}, executorService))
.toArray(CompletableFuture[]::new));
allFutures.join();
executorService.shutdown();
}
}
- 策略二:减少不必要的中间结果传递
- 适用场景:如果在CompletableFuture组合操作过程中,存在频繁的中间结果传递和处理,会增加内存开销和处理时间。当某些中间结果在后续操作中不再使用时,可考虑避免不必要的传递。
- 代码示例:
import java.util.concurrent.CompletableFuture;
public class CompletableFutureReduceIntermediate {
public static void main(String[] args) {
CompletableFuture.supplyAsync(() -> {
// 初始任务
return "initial result";
})
.thenAcceptAsync(result -> {
// 直接处理结果,避免中间结果传递
System.out.println("Processed: " + result);
});
}
}