CompletableFuture 实现CompletionStage 和Future 两个接口
CompletableFuture的使用具有以下优势和特点:
- 异步执行:CompletableFuture允许任务在后台线程中异步执行,不会阻塞主线程,提高了应用程序的响应性和性能。
- 链式操作:通过CompletableFuture提供的方法,可以方便地对任务进行链式操作,构建复杂的任务依赖关系,实现高效的任务调度和执行。
- 异常处理:CompletableFuture提供了丰富的异常处理方法,可以处理任务执行过程中可能发生的异常,并实现灵活的错误处理和回退机制。
- 多任务组合:CompletableFuture支持多个任务的并发执行和结果组合。可以轻松地实现多任务并发处理的场景,提高应用程序的效率和并发性。
写一个CompletableFuture demo, 这个demo 需要做四件事:
- step1: 读取敏感词汇 => thread1
- step2: 读取文本 => thread2
- step3: 替换操作 => thread3
- step4: 打印替换后的文本
public class CompletableFutureDemo {
public static void main(String[] args) throws ExecutionException, InterruptedException {
ExecutorService executor = Executors.newFixedThreadPool(5);
// step1: 读取敏感词汇 => thread1
CompletableFuture<List<String>> filterWordFuture = CompletableFuture.supplyAsync(() -> {
return FileUtil.getLines("filter_words.txt");
}, executor);
// step2: 读取文本 => thread2
CompletableFuture<String> wordFuture = CompletableFuture.supplyAsync(() -> {
return FileUtil.getContent("text.txt");
}, executor);
// step3: 替换操作 => thread3
CompletableFuture<String> replaceFuture = filterWordFuture.thenCombine(wordFuture, (filterWords, words) -> {
for (String filterWord : filterWords) {
words = words.replace(filterWord, "**");
}
return words;
});
// step4: 打印替换后的文本
String replace = replaceFuture.get();
System.out.println(replace);
executor.shutdown();
}
}