用java的Future写异步代码
时间: 2024-04-08 08:30:31 浏览: 56
使用 Java 的 Future 来编写异步代码可以通过创建 `CompletableFuture` 对象来实现。下面是一个示例:
```java
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class AsyncExample {
// 创建一个 ExecutorService
private static ExecutorService executorService = Executors.newFixedThreadPool(10);
// 定义一个异步函数,返回一个 CompletableFuture
public static CompletableFuture<String> asyncFunction() {
CompletableFuture<String> future = new CompletableFuture<>();
// 在 CompletableFuture 中执行异步操作
executorService.submit(() -> {
// 在这里编写需要异步执行的代码
// 这里仅作为示例,延时 2 秒后返回结果
try {
Thread.sleep(2000);
future.complete("异步执行完成");
} catch (InterruptedException e) {
future.completeExceptionally(e);
}
});
return future;
}
public static void main(String[] args) throws InterruptedException {
CompletableFuture<String> future = asyncFunction();
// 处理异步结果
future.whenComplete((result, exception) -> {
if (exception != null) {
System.out.println("异步执行出错:" + exception.getMessage());
} else {
System.out.println(result);
}
});
// 在这里可以继续执行其他操作,而不需要等待异步函数结束
System.out.println("继续执行其他操作");
// 阻塞主线程,等待异步函数执行完成
Thread.sleep(3000);
// 关闭 ExecutorService
executorService.shutdown();
}
}
```
在上面的示例中,我们创建了一个 `CompletableFuture` 对象,并使用 `executorService.submit` 方法在其中执行异步操作。在异步操作中,我们编写了需要异步执行的代码,这里仅为延时 2 秒后返回结果。在 `main` 方法中,我们调用 `asyncFunction` 获取一个 `CompletableFuture` 对象,并使用 `whenComplete` 方法处理异步结果。同时,我们可以在异步函数执行期间继续执行其他操作。
请注意,在实际应用中,你需要根据具体需求合理地管理线程池和资源的关闭。
阅读全文