- CompletableFuture使用
package com.infoextraction.controller;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import java.io.*;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
@Controller
public class HelloController {
public static ExecutorService executor= Executors.newFixedThreadPool(10);
private static Logger logger = LoggerFactory.getLogger(HelloController.class);
public static void main(String[] args) {
CompletableFuture.runAsync(()->{
Thread.currentThread().getId();
int i=10/2;
System.out.println("运行结果:"+i);
},executor);
}
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture<Integer> integerCompletableFuture = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
int i = 10 / 2;
System.out.println("运行结果:" + i);
return i;
}, executor);
Integer result = integerCompletableFuture.get();
logger.info("处理完后返回的结果为{}",result);
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture<Integer> integerCompletableFuture = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
int i = 10 / 2;
System.out.println("运行结果:" + i);
return i;
}, executor).whenComplete((result,exception)->{
logger.info("异步任务完成了。。结果是{},异常是{}",result,exception);
}).exceptionally(throwable -> {
return 10;
});
Integer integer = integerCompletableFuture.get();
logger.info("最终结果为{}",integer);
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture<Integer> integerCompletableFuture = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
int i = 10 / 2;
System.out.println("运行结果:" + i);
return i;
}, executor).handle((result,exception)->{
if(result!=null){
return result*2;
}
if(exception!=null){
return 0;
}
return 0;
});
Integer reslut = integerCompletableFuture.get();
logger.info("处理结果为{}",reslut);
}
public static void main(String[] args) {
CompletableFuture<Void> integerCompletableFuture = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
logger.info("任务A开始执行");
int i = 10 / 2;
System.out.println("运行结果:" + i);
return i;
},executor).thenRunAsync(()->{
logger.info("任务B开始执行");
System.out.println("111");
},executor);
}
public static void main(String[] args) {
CompletableFuture<Void> integerCompletableFuture = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
logger.info("任务A开始执行");
int i = 10 / 2;
System.out.println("运行结果:" + i);
return i;
},executor).thenAcceptAsync((res)->{
logger.info("任务B开始执行,获取到任务A的返回结果为{}",res);
logger.info("执行任务B逻辑11222233344");
},executor);
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture<String> integerCompletableFuture = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
logger.info("任务A开始执行");
int i = 10 / 2;
System.out.println("运行结果:" + i);
return i;
},executor).thenApplyAsync((res)->{
logger.info("任务B开始执行,获取到任务A的返回结果为{}",res);
return "Hello "+res;
},executor);
logger.info(integerCompletableFuture.get());
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture<Integer> taskA = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
logger.info("任务A开始执行");
int i = 10 / 2;
System.out.println("运行结果:" + i);
return i;
},executor);
CompletableFuture<String> taskB = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
logger.info("任务B开始执行");
return "Hello";
},executor);
taskA.runAfterBothAsync(taskB,()->{
logger.info("任务C开始执行");
});
public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture<Integer> taskA = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
logger.info("任务A开始执行");
int i = 10 / 2;
System.out.println("运行结果:" + i);
return i;
},executor);
CompletableFuture<String> taskB = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
logger.info("任务B开始执行");
return "Hello";
},executor);
taskA.thenAcceptBothAsync(taskB,(taskAResult,taskBResult)->{
logger.info("任务A的执行结果为{},任务B的执行结果为{}",taskAResult,taskBResult);
},executor);
}
CompletableFuture<Integer> taskA = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
logger.info("任务A开始执行");
int i = 10 / 2;
System.out.println("运行结果:" + i);
return i;
},executor);
CompletableFuture<String> taskB = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
logger.info("任务B开始执行");
return "Hello";
},executor);
CompletableFuture<String> result = taskA.thenCombineAsync(taskB, (taskAResult, taskBResult) -> {
logger.info("开始执行任务C");
logger.info("任务A的执行结果为{},任务B的执行结果为{}", taskAResult, taskBResult);
return "任务A" + taskAResult + "任务B" + taskBResult + "任务C" + "World";
}, executor);
logger.info("最终执行结果为{}",result.get());
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture<Object> taskA = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
logger.info("任务A开始执行");
int i = 10 / 2;
System.out.println("运行结果:" + i);
return i;
},executor);
CompletableFuture<String> taskB = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
logger.info("任务B开始执行");
return "Hello";
},executor);
taskA.runAfterEitherAsync(taskB,()->{
logger.info("任务C开始执行");
},executor);
taskA.acceptEitherAsync(taskB,(res)->{
logger.info("任务A或者任务B的结果为{}",res);
logger.info("任务C开始执行");
},executor);
taskA.applyToEitherAsync(taskB,res->{
logger.info("任务A或者任务B的结果为{}",res);
logger.info("任务C开始执行");
return res+"任务C结果为"+"World";
},executor);
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture<Object> taskA = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
logger.info("任务A开始执行");
int i = 10 / 2;
System.out.println("运行结果:" + i);
return i;
},executor);
CompletableFuture<String> taskB = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
logger.info("任务B开始执行");
return "Hello";
},executor);
CompletableFuture<String> taskC = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
logger.info("任务C开始执行");
return "World";
},executor);
CompletableFuture<Void> voidCompletableFuture = CompletableFuture.allOf(taskA, taskB, taskC);
voidCompletableFuture.get();
logger.info("最终结果为{}",voidCompletableFuture.get());
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture<Object> taskA = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
logger.info("任务A开始执行");
int i = 10 / 2;
System.out.println("运行结果:" + i);
return i;
},executor);
CompletableFuture<String> taskB = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
logger.info("任务B开始执行");
return "Hello";
},executor);
CompletableFuture<String> taskC = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
logger.info("任务C开始执行");
return "World";
},executor);
CompletableFuture<Void> voidCompletableFuture = CompletableFuture.allOf(taskA, taskB, taskC);
voidCompletableFuture.get();
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture<Object> taskA = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
logger.info("任务A开始执行");
int i = 10 / 2;
System.out.println("运行结果:" + i);
return i;
},executor);
CompletableFuture<String> taskB = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
logger.info("任务B开始执行");
return "Hello";
},executor);
CompletableFuture<String> taskC = CompletableFuture.supplyAsync(() -> {
Thread.currentThread().getId();
logger.info("任务C开始执行");
return "World";
},executor);
CompletableFuture<Object> objectCompletableFuture = CompletableFuture.anyOf(taskA, taskB, taskC);
objectCompletableFuture.get();
logger.info("结果为{}", objectCompletableFuture.get());
}