一、异步任务创建
1.1、runAsync
分析源码:依靠创建一个Runnable() 接口实现类 对象 返回 CompletableFuture<Void>
public static CompletableFuture<Void> runAsync(Runnable runnable) {
return asyncRunStage(asyncPool, runnable);
}
底层通过 开启一个线程去执行
public static void main(String[] args) throws InterruptedException {
System.out.println("主线程程序开始 执行");
// 使用实现Runnable 匿名内部类
CompletableFuture.runAsync(new Runnable() {
@Override
public void run() {
System.out.println("异步线程执行异步任务");
}
});
System.out.println("主线程程序执行 结束 ");
}
用Lambda 简写
public static void main(String[] args) throws InterruptedException {
System.out.println("程序开始 执行");
// 使用实现Runnable 匿名内部类
CompletableFuture.runAsync(() -> {
System.out.println("异步线程执行异步任务");
});
// 让主线程睡3秒,等待一下异步任务执行
Thread.sleep(3000);
System.out.println("程序执行 结束 ");
}
1.2、supplyAsync
实现一个或传入一个 Supplier<U> 对象,返回一个 CompletableFuture<U>
U 传入的对象类型
public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier) {
return asyncSupplyStage(asyncPool, supplier);
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
System.out.println("主线程 开始执行");
CompletableFuture<String> newFuture = CompletableFuture.supplyAsync(() -> {
String threadName = Thread.currentThread().getName();
String st = "异步任务";
System.out.println("正在执行异步任务的子线程:" + threadName);
return st;
});
// 会阻塞异步任务线程 等待获取到结果
String result = newFuture.get();
System.out.println("异步结果:" + result);
System.out.println("主线程 执行结束");
}
标签:异步,String,System,CompletableFuture,println,out From: https://www.cnblogs.com/niunai/p/17437213.html