java多线程和CompletableFuture.runAsync结合使用例子
时间: 2024-02-28 19:50:35 浏览: 91
java多线程同步例子
4星 · 用户满意度95%
Java中的多线程编程是一个重要的概念,它可以充分利用计算机的多个核心以提高程序的性能。在Java中,你可以使用Thread或Runnable来实现基本的线程编程。而CompletableFuture则是Java 8引入的一个强大的工具,它提供了异步编程的能力,可以更方便地处理异步任务。
下面是一个使用CompletableFuture和runAsync方法结合的例子:
```java
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class Main {
public static void main(String[] args) {
// 创建一个CompletableFuture对象
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
// 这里是你要异步执行的任务
try {
// 模拟一个耗时操作
Thread.sleep(3000);
System.out.println("任务执行完成");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
// 在主线程做一些其他的工作
try {
Thread.sleep(100); // 主线程休眠一下
} catch (InterruptedException e) {
e.printStackTrace();
}
// 等待异步任务完成,返回结果(在这个例子中为null)
try {
future.get(); // 注意这会阻塞,除非有并发修改,否则在正常应用场景中应避免使用
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
```
在这个例子中,我们创建了一个CompletableFuture对象,并使用`runAsync`方法来启动一个新的线程来执行一个任务。这个任务只是一个简单的模拟耗时操作(这里使用了`Thread.sleep`)。在主线程中,我们等待异步任务完成,并获取其结果。注意,这个例子中的`future.get()`会阻塞主线程,除非有并发修改,否则在正常应用场景中应避免使用。在实际应用中,你可能需要使用更复杂的方式来处理异步任务的结果。
CompletableFuture还提供了许多其他的方法,如`thenApply`、`thenAccept`、`thenCompose`等,可以更方便地处理异步任务的结果和异常。你可以根据需要选择合适的方法来处理你的异步任务。
阅读全文