package com.atguigu.ssyx;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.*;
@Slf4j
public class CompletableFutrueTest {
static ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 10, 10, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(1000));
public static void main(String[] args) throws ExecutionException, InterruptedException {
// 1.没有返回值
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
try {
Thread.sleep(1000);
// log.error("hello");
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
});
// 2.有返回值
CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
try {
log.error("future1开始");
Thread.sleep(2000);
log.error("我要睡了");
int i = 1 / 0;
return "hello";
} catch (InterruptedException e) {
e.printStackTrace();
}
return "123";
}, executor);
// log.error(future1.get());
// 3.先后执行,执行时间跟两个同步一样
future1.thenRun(() -> {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
log.error("两个都结束");
});
// 4.whenComplete
future1.exceptionally((error) -> {
log.error("异常:" + error.getMessage());
// 异常返回默认值
return "456";
}).whenComplete((res, error) -> {
log.error("返回:{}", res);
log.error("错误:{}", error);
});
// 5.allOf
log.error("结束:{}",CompletableFuture.allOf(future, future1).get());
}
}
CompletableFutrue的使用
最新推荐文章于 2024-07-21 22:27:18 发布