// 提交并执行任务,任务启动时返回了一个 Future对象, // 如果想得到任务执行的结果或者是异常可对这个Future对象进行操作 Future future1 = es.submit(task1); // 获得第一个任务的结果,如果调用get方法,当前线程会等待任务执行完毕后才往下执行 System.out.println("task1: " + future1.get()); Future f...
只有主动调用 get 方法去获取值,但是有可能值还没准备好,就阻塞等待。 任务处理过程中出现异常会把异常隐藏,封装到 Future 里面去,只有调用 get 方法的时候才知道异常了。 2. Guava 中的 Future 增加了一个监听方法,执行完成后通知!!! public static void main(String[] args) throws InterruptedException { //...
future.get()处理多个线程的java例子 一种代码示例是使用ExecutorService类的submit()方法提交多个Callable任务,并返回多个Future对象, 然后在主线程中循环调用Future对象的get()方法获取结果,并进行汇总1。 代码如下:importjava.math.BigDecimal;importjava.util.ArrayList;importjava.util.List;importjava.util.concurrent.C...
main获取的结果 -- startpool-1-thread-1,执行 demo -- startException in thread "main" java.util.concurrent.TimeoutException at java.util.concurrent.FutureTask.get(FutureTask.java:205) at basic.thread.FutureDemo.main(FutureDemo.java:20)pool-1-thread-1,执行 demo -- end 我们可以发现:当前线程会...
3.阻塞式获取结果:在使用get()方法获取结果时,如果任务还未完成,调用线程会被阻塞,无法进行其他操作。这种阻塞式获取结果的方式可能导致整体性能下降,特别是在多个异步任务同时执行时。 4.缺乏异常处理灵活性:Future和FutureTask在处理任务执行过程中的异常时,比较简单且不够灵活。通过捕获ExecutionException来获取异常信息...
工作中,很多人会使用线程池的submit方法 获取 Future 类型的返回值,然后使用java.util.concurrent.Future#get(long, java.util.concurrent.TimeUnit)实现“最多等多久”的效果。 但很多人对此的理解只停留在表面上,稍微问深一点点可能就懵逼了。 比如,java.util.concurrent.Future#get(long, java.util.concurrent.Ti...
s= future.get(1, TimeUnit.SECONDS); }catch(TimeoutException e) { System.out.println(LocalDateTime.now()); } } 2024-01-23T16:11:26.388319 2024-01-23T16:11:29.392559 2024-01-23T16:11:30.394918 通过这个示例,可以看到这个超时时间并不是从submit这个任务的时候开始的,而是在get的时候开始计算等待...
Integer result = future.get(); get()方法还有一个重载方法。 Integer result = future.get(500, TimeUnit.MILLISECONDS); get(long, TimeUnit) 和 get() 的区别在于,如果任务没有在指定的超时时间之前返回,前者将抛出一个TimeoutException。 使用cancel() 取消任务 ...
从上述demo中可以看出,future.get()是阻塞的 CompletableFuture demo 实现上述 FutureTask 的功能 package com.jenson.future;import java.util.concurrent.CompletableFuture;import java.util.concurrent.ExecutionException;public class Calc2Test{publicstaticIntegercalc(Integer para){try{if(para==60){// 抛出一个异...
Future Future 又是一个接口,里面只有五个方法:从方法名称上相信你已经能看出这些方法的作用 铺垫了这么多,看到这你也许有些乱了,咱们赶紧看一个例子,演示一下几个方法的作用 程序运行结果如下:如果你运行上述示例代码,主线程调用 future.get() 方法会阻塞自己,直到子任务完成。我们也可以使用 Future 方法...