Java 在这方面,未来和完全未来的区别是什么? 用例示例
在下面的示例中,使用future和completable future有什么区别 我读到的一个主要用途是在completable future中使用.apply(),您可以连接多个方法 Future不是这样的吗?在一个方法()中连接方法,并在一个单独的线程中调用该方法(){连接它们的方法} 我发现他们两个做着同样的事情。谁能解释一下吗Java 在这方面,未来和完全未来的区别是什么? 用例示例,java,java-8,future,completable-future,Java,Java 8,Future,Completable Future,在下面的示例中,使用future和completable future有什么区别 我读到的一个主要用途是在completable future中使用.apply(),您可以连接多个方法 Future不是这样的吗?在一个方法()中连接方法,并在一个单独的线程中调用该方法(){连接它们的方法} 我发现他们两个做着同样的事情。谁能解释一下吗 class FutureExample { static boolean method1() { return true; }
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 stackoverflow 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);
}
}
class FutureExample{
静态布尔方法1(){
返回true;
}
静态布尔方法2(布尔m){
返回m;
}
静态布尔方法(){
布尔v=method1();
返回方法2(v);
}
公共静态void main(字符串[]args){
ExecutorService=Executors.newFixedThreadPool(1);//对于stackoverflow问题,初始化为1
Future=service.submit(futurexample::method);
}
}
对
类CompletableFutureExample{
静态布尔方法1(){
返回true;
}
静态布尔方法2(布尔m){
返回m;
}
公共静态void main(字符串[]args){
CompletableFuture=CompletableFuture.supplyAsync(CompletableFutureExample::method1)。然后应用(CompletableFutureExample::method2);
}
}
- 已完成
- 失败
然后接受(函数f)
然后应用(…)
然后运行(…)
- 已完成
- 失败
然后接受(函数f)
然后应用(…)
然后运行(…)
Future
):
- 这两个方法始终在同一个线程中执行,该线程将被阻塞,直到两个函数都完成
- 没有异步异常处理
- 您无法轻松地组合/修改执行链:您始终需要为每个函数组合声明一个新方法
CompletableFuture
(或者更一般地说--CompletionStage
)
Future
):
- 这两个方法始终在同一个线程中执行,该线程将被阻塞,直到两个函数都完成
- 没有异步异常处理
- 您无法轻松地组合/修改执行链:您始终需要为每个函数组合声明一个新方法
当您需要组合/合并不同异步调用的结果、处理整个链的异常时,
CompletableFuture
(或者更一般地说--CompletionStage
)会出现,管理线程等。这是一个奇怪的问题,我们可以举一个最简单的CompletableFuture
用法的例子,询问一个只能做到这一点的构造的区别。那么CompletableFuture.supplyAsync(CompletableFuture示例::method1)呢?然后合并(CompletableFuture.supplyAsync(()->“任意”),(b,s)->一些其他计算)代码>?你能用一个简单的执行器和方法来建模吗?或者,如何:CompletableFuture.SupplySync(CompletableFutureExample::method1)。然后应用同步(CompletableFutureExample::method2,EventQueue::invokeLater)
?这是一个奇怪的问题,你可以举一个最简单的可以想象的例子来说明可完成的未来
用法,并询问与只能这样做的构造的区别。那么CompletableFuture.supplyAsync(CompletableFuture示例::method1)呢?然后合并(CompletableFuture.supplyAsync(()->“任意”),(b,s)->一些其他计算)代码>?你能用一个简单的执行器和方法来建模吗?或者,如何:CompletableFuture.supplySync(CompletableFutureExample::method1)。然后应用同步(CompletableFutureExample::method2,EventQueue::invokeLater)
?