当前位置:实例文章 » JAVA Web实例» [文章]java多线程之FutureTask、Future、CompletableFuture

java多线程之FutureTask、Future、CompletableFuture

发布人:shili8 发布时间:2025-01-23 20:45 阅读次数:0

**Java 多线程之 FutureTask、Future 和 CompletableFuture**

在 Java 中,多线程编程是非常重要的概念。它可以帮助我们提高程序的并发性和性能。在本文中,我们将讨论三个相关的类:`FutureTask`、`Future` 和 `CompletableFuture`。

###1. FutureTask`FutureTask` 是一个实现了 `Runnable` 接口的类,它代表一个异步任务。它可以被提交到线程池中执行,并且可以等待任务完成后获取结果。

#### 构造方法:

javapublic FutureTask(Callable callable) {
 if (callable == null)
 throw new NullPointerException();
 this.callable = callable;
}


#### 方法:

* `run()`:执行任务,返回结果。
* `get()`:等待任务完成后获取结果。

####例子:

javaimport java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class FutureTaskExample {
 public static void main(String[] args) throws ExecutionException, InterruptedException {
 // 创建一个FutureTask对象,传入Callable接口的实现类 Callable callable = new Callable() {
 @Override public String call() throws Exception {
 System.out.println("任务正在执行...");
 Thread.sleep(2000);
 return "任务完成";
 }
 };
 FutureTask futureTask = new FutureTask<>(callable);

 // 提交到线程池中执行 Thread thread = new Thread(futureTask);
 thread.start();

 // 等待任务完成后获取结果 String result = futureTask.get();
 System.out.println("结果:" + result);
 }
}


###2. Future`Future` 是一个接口,它代表一个异步计算的结果。它可以被用于等待任务完成后获取结果。

#### 方法:

* `get()`:等待任务完成后获取结果。
* `isDone()`:判断任务是否已经完成。
* `isCancelled()`:判断任务是否已经取消。

####例子:

javaimport java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class FutureExample {
 public static void main(String[] args) throws ExecutionException, InterruptedException {
 // 创建一个Future对象,传入Callable接口的实现类 Callable callable = new Callable() {
 @Override public String call() throws Exception {
 System.out.println("任务正在执行...");
 Thread.sleep(2000);
 return "任务完成";
 }
 };
 Future future = java.util.concurrent.Executors.newSingleThreadExecutor().submit(callable);

 // 等待任务完成后获取结果 String result = future.get();
 System.out.println("结果:" + result);
 }
}


###3. CompletableFuture`CompletableFuture` 是一个类,它代表一个异步计算的结果。它可以被用于等待任务完成后获取结果,并且提供了更多的功能。

#### 构造方法:

javapublic static  CompletableFuture supplyAsync(Supplier supplier) {
 return supplyAsync(supplier, executor);
}


#### 方法:

* `get()`:等待任务完成后获取结果。
* `thenApply()`:指定一个函数来处理结果。
* `thenAccept()`:指定一个函数来处理结果。
* `thenCombine()`:指定两个函数来处理结果。
* `exceptionally()`:指定一个函数来处理异常。

####例子:

javaimport java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class CompletableFutureExample {
 public static void main(String[] args) throws ExecutionException, InterruptedException {
 // 创建一个CompletableFuture对象,传入Supplier接口的实现类 Supplier supplier = new Supplier() {
 @Override public String get() {
 System.out.println("任务正在执行...");
 Thread.sleep(2000);
 return "任务完成";
 }
 };
 CompletableFuture completableFuture = CompletableFuture.supplyAsync(supplier);

 // 等待任务完成后获取结果 String result = completableFuture.get();
 System.out.println("结果:" + result);
 }
}


在本文中,我们讨论了 `FutureTask`、`Future` 和 `CompletableFuture` 这三个相关的类。它们都代表一个异步计算的结果,可以被用于等待任务完成后获取结果,并且提供了更多的功能。通过使用这些类,开发者可以更容易地编写并发性高的程序,从而提高程序的性能和可维护性。

其他信息

其他资源

Top