Java等待异步回调函数里结果返回
时间: 2024-10-18 14:10:03 浏览: 53
在Java中,当处理异步操作,如网络请求、文件读取等,通常会涉及到回调函数或使用Future/CompletableFuture来处理非阻塞的异步计算。如果你需要等待异步操作的结果,可以采用以下几种方法:
1. **匿名内部类回调**:对于简单的回调,你可以创建一个匿名内部类,它实现了一个Runnable或者Callable接口,并在其run()或call()方法中处理结果。
```java
MyAsyncTask task = new MyAsyncTask() {
@Override
protected String doInBackground(String... params) {
// 异步操作
return "result";
}
@Override
protected void onPostExecute(String result) {
// 这里可以访问到异步操作的结果
System.out.println("Result: " + result);
}
};
task.execute();
```
2. **Future和ExecutorService**:使用Future和ExecutorService配合,你可以获取异步任务的未来结果。一旦任务完成,你可以通过`get()`方法获取结果。
```java
Future<String> future = executor.submit(new AsyncTask());
try {
String result = future.get(); // 等待结果
System.out.println(result);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
```
3. **CompletableFuture**:Java 8引入了CompletableFuture,提供了一种更强大的方法来处理异步操作。你可以链式调用thenApply(), thenAccept(), 或者thenCompose() 来处理结果。
```java
CompletableFuture.supplyAsync(() -> {
// 异步操作
return "result";
}).thenAccept(result -> {
// 处理结果
System.out.println("Result: " + result);
});
```
阅读全文