InterruptedException{// 1. 创建一个有返回值的线程任务Callable, 返回StringCallable<String>c=newCallable(){@OverridepublicObjectcall()throws Exception{TimeUnit.SECONDS.sleep(2);System.out.println(Thread.currentThread().getName()+"| 正在执行有返回值任务");return"success";}};// 2. 创建一个Future用...
InterruptedException{ExecutorServiceexecutorService=Executors.newFixedThreadPool(1);Future<Integer>futureResult=executorService.submit(()->{TimeUnit.SECONDS.sleep(2);return42;});// 任务进行中的时候可以做一些其他事情// ...// 当我们需要这个结果的时候,我们可以调用 get// 如果任务...
步骤: 1)任务类实现Callable接口 2)创建线程池:ExecutorService es = Executors.newCachedThreadPool(); 3)执行任务:chuju cj = new chuju();Future<Boolean> future = es.submit(cj); 4)获取子线程中任务的执行结果:future.get() 下面通过实例简单说下其用法: ...
public interface RunnableFuture<V> extends Runnable, Future<V> { void run(); } 可以看出RunnableFuture继承了Runnable和Future接口,而FutureTask实现了RunnableFuture接口。所以它既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值。 上面说了这么多,接下来使用Callable+FutureTask创建线程并获取执行结...
FutureTask是真正工作的处理类,实现了RunnableFuture接口,而RunnableFuture接口继承了Runnable和Future接口,所以FutureTask既可以作为Runnable被Thread执行,也可以获取Future异步执行的结果; FutureTask两个构造方法,一个接收Callable的参数实例,另一个接收Runnable的参数实例 ...
所以Future是一个存储器,它存储了call()这个任务的结果,而这个任务的执行时间是无法提前确定的,因为这完全取决于call()方法执行的情况 get():获取结果 get方法的行为取决于Callable任务的状态,只有以下这5种情况: 1.任务正常完成:get方法会立刻返回结果
(3)FutureTask类:它是一个适配器,同时实现了Runnable接口和Future接口,又会关联一个Callable实例。它...
本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果。 Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务的返回值,下面来...
Future+Runnable,不带返回值: 代码语言:javascript 复制 /** * * @description: Future使用 * * 实现callable接口,同时重写call方法,方法submit不仅可以传入Callable对象, * 也可以传入Runnable对象,说明submit()方法支持有返回值和无返回值的功能 * get
在Java中,Future和Callable接口是并发编程的两个重要工具。它们提供了一种机制,允许我们在主线程中启动一个或多个子线程,然后在主线程中等待这些子线程的完成。这样,我们就可以在主线程中进行其他操作,而不需要阻塞等待子线程的完成。 Future接口代表了一个异步计算的结果。它提供了一种检查计算是否完成的方法,以及获...