返回
图解CompletableFuture源码,初探CompletableFuture用法与实现
后端
2023-11-24 03:51:50
CompletableFuture源码解析
属性部分
首先我们来看一下CompletableFuture的属性部分,属性部分包含了以下几个属性:
- private volatile Object value; // 当前CompletableFuture包含的结果。
- private Throwable throwable; // 当CompletableFuture计算遇到异常时,会把异常信息保存在throwable中。
- private volatile int state; // 当前CompletableFuture的状态。
- private boolean used; // 是否已经被使用过。
- private WaitNode waiters; // 等待结果的线程。
构造函数部分
CompletableFuture的构造函数主要有以下几个:
- CompletableFuture(); // 无参构造函数。
- CompletableFuture(Executor executor); // 带有线程池的构造函数。
- CompletableFuture(Supplier<? extends T> supplier); // 带有任务的构造函数。
- CompletableFuture(CompletionStage<? extends T> stage); // 带有另一个CompletableFuture的构造函数。
方法部分
CompletableFuture的方法主要有以下几个:
- get(); // 等待CompletableFuture计算完成,并返回结果。
- get(long timeout, TimeUnit unit); // 等待CompletableFuture计算完成,并返回结果,带有超时时间。
- join(); // 等待CompletableFuture计算完成,不返回结果。
- complete(T value); // 手动完成CompletableFuture,并设置结果。
- completeExceptionally(Throwable throwable); // 手动完成CompletableFuture,并设置异常。
- cancel(boolean mayInterruptIfRunning); // 取消CompletableFuture的计算。
- isDone(); // 判断CompletableFuture是否已经完成。
- isCancelled(); // 判断CompletableFuture是否已经被取消。
- isCompletedExceptionally(); // 判断CompletableFuture是否因为异常而完成。
- thenApply(Function<? super T, ? extends U> fn); // 把CompletableFuture的结果作为参数,应用到fn函数上,并返回一个新的CompletableFuture。
- thenAccept(Consumer<? super T> action); // 把CompletableFuture的结果作为参数,应用到action函数上,不返回任何值。
- thenRun(Runnable action); // 把CompletableFuture的结果作为参数,应用到action函数上,不返回任何值。
- exceptionally(Function<Throwable, ? extends T> fn); // 当CompletableFuture计算遇到异常时,把异常信息作为参数,应用到fn函数上,并返回一个新的CompletableFuture。
源码实现部分
CompletableFuture的源码实现主要包含以下几个部分:
- 属性部分
- 构造函数部分
- 方法部分
属性部分
CompletableFuture的属性部分主要包含了以下几个属性:
- private volatile Object value; // 当前CompletableFuture包含的结果。
- private Throwable throwable; // 当CompletableFuture计算遇到异常时,会把异常信息保存在throwable中。
- private volatile int state; // 当前CompletableFuture的状态。
- private boolean used; // 是否已经被使用过。
- private WaitNode waiters; // 等待结果的线程。
构造函数部分
CompletableFuture的构造函数主要有以下几个:
- CompletableFuture(); // 无参构造函数。
- CompletableFuture(Executor executor); // 带有线程池的构造函数。
- CompletableFuture(Supplier<? extends T> supplier); // 带有任务的构造函数。
- CompletableFuture(CompletionStage<? extends T> stage); // 带有另一个CompletableFuture的构造函数。
方法部分
CompletableFuture的方法主要有以下几个:
- get(); // 等待CompletableFuture计算完成,并返回结果。
- get(long timeout, TimeUnit unit); // 等待CompletableFuture计算完成,并返回结果,带有超时时间。
- join(); // 等待CompletableFuture计算完成,不返回结果。
- complete(T value); // 手动完成CompletableFuture,并设置结果。
- completeExceptionally(Throwable throwable); // 手动完成CompletableFuture,并设置异常。
- cancel(boolean mayInterruptIfRunning); // 取消CompletableFuture的计算。
- isDone(); // 判断CompletableFuture是否已经完成。
- isCancelled(); // 判断CompletableFuture是否已经被取消。
- isCompletedExceptionally(); // 判断CompletableFuture是否因为异常而完成。
- thenApply(Function<? super T, ? extends U> fn); // 把CompletableFuture的结果作为参数,应用到fn函数上,并返回一个新的CompletableFuture。
- thenAccept(Consumer<? super T> action); // 把CompletableFuture的结果作为参数,应用到action函数上,不返回任何值。
- thenRun(Runnable action); // 把CompletableFuture的结果作为参数,应用到action函数上,不返回任何值。
- exceptionally(Function<Throwable, ? extends T> fn); // 当CompletableFuture计算遇到异常时,把异常信息作为参数,应用到fn函数上,并返回一个新的CompletableFuture。