在多线程编程中,异步处理是一种常见的需求。Java提供了多种方式来实现异步操作,其中Future和CompletableFuture是两个非常重要的工具。本文将通过具体的代码示例,详细介绍这两种机制的使用方法及其背后的原理。
Java多线程异步处理:Future与CompletableFuture
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
public class AsyncFutureExample {
public static void main(String[] args) throws Exception {
// 使用CompletableFuture.runAsync执行异步任务
CompletableFuture futureTask = CompletableFuture.runAsync(() -> {
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " - 任务执行");
});
System.out.println("主线程继续执行");
futureTask.get(); // 等待异步任务完成
// 使用CompletableFuture.supplyAsync执行返回结果的异步任务
CompletableFuture resultFuture = CompletableFuture.supplyAsync(() -> {
if (true) {
throw new RuntimeException("故意抛出异常");
}
return 1024L;
});
Long result = resultFuture.whenComplete((value, exception) -> {
if (exception != null) {
System.out.println("发生异常: " + exception.getMessage());
} else {
System.out.println("任务成功,结果为: " + value);
}
}).exceptionally(e -> {
System.out.println("异常处理: " + e.getMessage());
return 1023L;
}).get();
System.out.println("最终结果: " + result);
}
}
特别感谢
感谢狂神说Java老师提供的宝贵资源和无私分享,使得本文能够更加深入地探讨Java多线程异步处理的相关知识点。
下一篇:Java多线程(九)JMM内存模型与Volatile关键字详解