Future 和 Completable future 在这方面有什么区别?
What is the difference between Future and Completable future in this regards?
用例示例
在以下示例中使用 future 与 complete future 有什么区别。
我读到的主要用途之一是在可完成的未来使用 .apply(),您可以连接多个方法。
Future 不是将方法连接到 method() 中并在单独的线程中调用该方法() {which wired them}。
我发现他们都在做同样的事情。谁能解释一下?
class FutureExample {
static boolean method1() {
return true;
}
static boolean method2(boolean m) {
return m;
}
static boolean method() {
boolean v = method1();
return method2(v);
}
public static void main(String[] args) {
ExecutorService service = Executors.newFixedThreadPool(1); //initialize to 1 for Whosebug question
Future<Boolean> future = service.submit(FutureExample::method);
}
}
VERSUS
class CompletableFutureExample {
static boolean method1() {
return true;
}
static boolean method2(boolean m) {
return m;
}
public static void main(String[] args) {
CompletableFuture<Boolean> future = CompletableFuture.supplyAsync(CompletableFutureExample::method1).thenApply(CompletableFutureExample::method2);
}
}
- CompletableFuture 用于通过 运行 任务在与主线程不同的线程上编写 non-blocking 代码,并通知主线程进度。它可能有两种类型的结果:
- 完成
- 失败
这种情况下的主要区别在于您可以使用方法 .compleate(T t) 完成 Future 单元。
- 借助 CompletableFuture,您可以附加 Callable 方法:
thenAccept(Function f)
thenApply(...)
thenRun(...)
对于 Future,当它完成时您不会收到通知,对于 CompletableFuture,您有这种可能性。
希望我回答了你的问题。祝你有个愉快的一天。
第一种情况(仅Future
):
这两个方法总是在同一个线程中执行,这个线程被阻塞直到两个函数都完成
无异步异常处理
你不能轻易地combine/modify执行链:你总是需要为每个函数组合声明一个新方法
在此特定示例中,差异并不显着。的真正力量
当您需要 combine/merge 不同异步调用的结果、处理整个链的异常、管理线程等时,CompletableFuture
(或更一般地 -- CompletionStage
)出现
用例示例
在以下示例中使用 future 与 complete future 有什么区别。
我读到的主要用途之一是在可完成的未来使用 .apply(),您可以连接多个方法。
Future 不是将方法连接到 method() 中并在单独的线程中调用该方法() {which wired them}。
我发现他们都在做同样的事情。谁能解释一下?
class FutureExample {
static boolean method1() {
return true;
}
static boolean method2(boolean m) {
return m;
}
static boolean method() {
boolean v = method1();
return method2(v);
}
public static void main(String[] args) {
ExecutorService service = Executors.newFixedThreadPool(1); //initialize to 1 for Whosebug question
Future<Boolean> future = service.submit(FutureExample::method);
}
}
VERSUS
class CompletableFutureExample {
static boolean method1() {
return true;
}
static boolean method2(boolean m) {
return m;
}
public static void main(String[] args) {
CompletableFuture<Boolean> future = CompletableFuture.supplyAsync(CompletableFutureExample::method1).thenApply(CompletableFutureExample::method2);
}
}
- CompletableFuture 用于通过 运行 任务在与主线程不同的线程上编写 non-blocking 代码,并通知主线程进度。它可能有两种类型的结果:
- 完成
- 失败
这种情况下的主要区别在于您可以使用方法 .compleate(T t) 完成 Future 单元。
- 借助 CompletableFuture,您可以附加 Callable 方法:
thenAccept(Function f)
thenApply(...)
thenRun(...)
对于 Future,当它完成时您不会收到通知,对于 CompletableFuture,您有这种可能性。
希望我回答了你的问题。祝你有个愉快的一天。
第一种情况(仅
Future
):这两个方法总是在同一个线程中执行,这个线程被阻塞直到两个函数都完成
无异步异常处理
你不能轻易地combine/modify执行链:你总是需要为每个函数组合声明一个新方法
在此特定示例中,差异并不显着。的真正力量
当您需要 combine/merge 不同异步调用的结果、处理整个链的异常、管理线程等时,CompletableFuture
(或更一般地 -- CompletionStage
)出现