CompletableFuture.supplyAsync 线程
时间: 2023-11-10 19:03:58 浏览: 34
CompletableFuture.supplyAsync方法会在ForkJoinPool.commonPool()线程池中执行,如果需要指定线程池,可以使用CompletableFuture.supplyAsync(Supplier<U> supplier, Executor executor)方法。
相关问题
CompletableFuture.supplyAsync 如何指定线程池
CompletableFuture.supplyAsync方法可以使用指定的线程池来异步执行任务。您可以使用Executor参数来指定线程池。
以下是一个例子,演示如何创建自定义线程池,并将任务交给该线程池来执行:
```java
// 创建一个拥有3个线程的线程池
Executor executor = Executors.newFixedThreadPool(3);
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// 这个任务将在自定义线程池中运行
System.out.println("Task is running in thread: " + Thread.currentThread().getName());
return "Result";
}, executor);
// 等待任务执行完成并获取结果
String result = future.join();
System.out.println("Result: " + result);
```
在这个例子中,我们使用`Executors.newFixedThreadPool(3)`方法创建了一个拥有3个线程的线程池。`CompletableFuture.supplyAsync`方法的第二个参数是该线程池的实例。在future.join()调用之前,我们打印了任务执行的线程名称。
怎么用CompletableFuture .supplyAsync
CompletableFuture.supplyAsync可以用于异步执行一个方法并返回一个结果。具体使用方法如下:
1. 定义一个有返回值的方法,例如:
```
public String doSomething() {
// 假装耗时操作
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "Hello, World!";
}
```
2. 调用supplyAsync方法:
```
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> doSomething());
```
supplyAsync方法会在内部开启一个新的线程,异步地执行doSomething方法,并将结果封装成一个CompletableFuture对象返回。
3. 获取执行结果:
```
future.thenAccept(result -> System.out.println(result));
```
thenAccept方法会在异步任务完成后执行,接受任务的执行结果作为参数进行处理。
需要注意的是,CompletableFuture.supplyAsync方法默认使用ForkJoinPool.commonPool作为线程池,如果需要使用自定义的线程池,可以使用CompletableFuture.supplyAsync(Supplier<U> supplier, Executor executor)方法,并传入自定义的线程池。