异步是指在程序执行过程中,不需要等待某个任务的完成,而是在发出该任务后继续执行后面的代码,等任务完成后再回来处理该任务的结果。异步可以提高程序的并发性和响应速度。
举个例子,比如我们要下载一张图片并展示在页面上。如果使用同步方式下载图片,在下载过程中浏览器的界面会被卡住,直到下载完毕才能进行下一步操作。但是如果使用异步方式,先发起下载请求,然后继续渲染页面,当图片下载完成后再来更新图片位置即可,使得用户不会感到卡顿。
在Java中,异步编程可以通过多线程来实现。通常使用异步任务提交给线程池或单独的线程来处理,主线程则不阻塞地继续执行后续代码,等异步任务完成后再通过回调或Future返回结果或通知主线程进行处理。
以下是使用CompletableFuture实现异步编程的示例代码:
public class AsyncDemo {
public static void main(String[] args) throws InterruptedException, ExecutionException {
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
// 异步任务
try {
Thread.sleep(1000); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
return 42;
});
System.out.println("继续执行其他业务逻辑");
// 使用回调函数处理异步任务完成后的结果
future.thenAccept(result -> System.out.println("异步任务返回结果:" + result));
}
}
在以上示例代码中,我们使用CompletableFuture实现了一个异步任务。在supplyAsync()方法中传入一个Lambda表达式来表示需要异步执行的任务(模拟耗时操作),然后继续执行后面的业务逻辑。future.thenAccept()方法则是使用回调函数的方式,在异步任务完成后通知主线程执行处理。