java 等待异步操作 完成 实例
时间: 2023-10-14 10:08:12 浏览: 98
Java中等待异步操作完成的常见方式是使用Future和Callable接口。下面是一个使用Future和Callable接口等待异步操作完成的示例:
```java
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class AsyncOperationExample {
public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newSingleThreadExecutor();
Callable<String> asyncTask = new Callable<String>() {
@Override
public String call() throws Exception {
// 异步操作
Thread.sleep(5000);
return "Hello, world!";
}
};
Future<String> future = executor.submit(asyncTask);
// 等待异步操作完成
while (!future.isDone()) {
System.out.println("Waiting for async operation to complete...");
Thread.sleep(1000);
}
// 获取异步操作的结果
String result = future.get();
System.out.println(result);
executor.shutdown();
}
}
```
上面的示例首先创建了一个单线程的线程池,然后定义了一个实现了Callable接口的异步任务。接着使用线程池的submit方法提交异步任务,并返回一个Future对象。在等待异步任务完成时,使用while循环检查Future对象的isDone方法是否为true,如果不是则等待1秒再次检查。最后通过调用Future对象的get方法获取异步任务的结果。
需要注意的是,使用Future和Callable接口等待异步操作完成时,如果异步操作抛出异常,那么在调用Future对象的get方法时将会抛出ExecutionException异常,并将原始异常作为其cause。因此,在调用get方法时应该捕获ExecutionException异常,并处理其中的cause异常。