如何同步执行 CompletableFuture
使用 get() 方法可以阻塞当前线程,直到 completablefuture 完成并获取结果。调用该方法会抛出 interruptedexception 和 executionexception,需进行捕获处理。

import java.util.concurrent.CompletableFuture;
public class SyncExample {
public static void main(String[] args) {
CompletableFuture<string> future = CompletableFuture.supplyAsync(() -> "Hello");
try {
String result = future.get(); // 阻塞等待
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
}</string>
如何处理异步任务中的异常
在 get() 调用中,如果异步任务抛出异常,会被包装在 ExecutionException 中。可以通过 getCause() 获取原始异常。

import java.util.concurrent.CompletableFuture;
public class ExceptionExample {
public static void main(String[] args) {
CompletableFuture<string> future = CompletableFuture.supplyAsync(() -> {
throw new RuntimeException("Error");
});
try {
future.get();
} catch (Exception e) {
if (e instanceof ExecutionException) {
System.out.println(e.getCause().getMessage());
}
}
}
}</string>
如何设置超时时间
可以使用 get(long timeout, TimeUnit unit) 方法设置超时时间。如果在规定时间内未完成,将抛出 TimeoutException。
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
public class TimeoutExample {
public static void main(String[] args) {
CompletableFuture<string> future = CompletableFuture.supplyAsync(() -> {
try { Thread.sleep(5000); } catch (InterruptedException e) {}
return "Done";
});
try {
String result = future.get(2, TimeUnit.SECONDS);
System.out.println(result);
} catch (Exception e) {
System.out.println("Timeout or Error");
}
}
}</string>
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











