如上图:FutureTask 类实现了RunnableFuture 接口,RunnableFuture 继承了Runnable接口和Future 接口。所以它既可以作为Runnable被线程执行,又可以作为Future 得到Callable 的返回值 比如我们通过一个线程运行Callable,但是Thread 不支持构造方法中传递Callable的实例,所以我们需要通过FutureTask 把一个Callable 包装成Runnable交给Thr...
下面我们再来看看FutureTask的方法执行示意图(方法和Future接口基本是一样的,这里就不过多描述了) 分析: (1)当FutureTask处于未启动或已启动状态时,如果此时我们执行FutureTask.get()方法将导致调用线程阻塞;当FutureTask处于已完成状态时,执行FutureTask.get()方法将导致调用线程立即返回结果或者抛出异常。 (2)当FutureTas...
FutureTask是真正工作的处理类,实现了RunnableFuture接口,而RunnableFuture接口继承了Runnable和Future接口,所以FutureTask既可以作为Runnable被Thread执行,也可以获取Future异步执行的结果; FutureTask两个构造方法,一个接收Callable的参数实例,另一个接收Runnable的参数实例 当传入的参数是Runnable时,通过Executors.callable(runnable...
为false表示允许正在运行的任务运行完成.Future的get方法等待计算完成,获取计算结果. 创建并启动有返回值的线程步骤与实现Runnable接口相似: 1.创建Callable接口的实现类,并实现call()方法 2.创建Callable实现类的实例,使用FutureTask类来包装Callable对象 3.使用FutrueTask对象作为Thread对象的target创建并启动新线程。 4....
Future是在主线程跟踪其他线程的进度和结果。 FutureTask 创建一个线程Runnable是必须的,要保存线程的返回结果Future是必须的,因此有了FutureTask,FutureTask同时实现了Runnable和Future接口。 FutureTask对象可以通过传入Callable对象的构造器创建对象,然后FutureTask对象中也有包含要创建的线程对象。因此间接地可以使用Callable创建...
接下来我们在看一个接口RunnableFuture接口,它继承了Runnable接口和Future接口,而FutureTask实现了RunableFuture接口,所以它既可以作为Runable被线程执行,又可以作为Future得到Callable的返回值。 画一个类图简单明了,亿图软件画的 我们通过一个线程运行Callable,但是Thread目前不支持构造方法传递Callable实例,所以我们需要通过Futu...
FutureTask FutureTask是实现了future的Runable,FutureTask比Runable多了一个执行的返回值 privatevoidtest(){AsyncTask<Boolean,String,Integer>asyncTask=newAsyncTask<Boolean,String,Integer>(){@OverrideprotectedIntegerdoInBackground(Boolean...booleans){returnnull;}@OverrideprotectedvoidonPreExecute(){super.onPreExe...
由Callable创建一个FutureTask对象:FutureTask futureTask= new FutureTask(oneCallable); 注释:FutureTask是一个包装器,它通过接受Callable来创建,它同时实现了Future和Runnable接口。 由FutureTask创建一个Thread对象:Thread oneThread = new Thread(futureTask);
FutureTask 2019-12-15 21:31 − # 从前创建线程的弊端 * 没有返回值 * 不能捕获异常 现在使用Callable+FutureTask既可以有返回值,也可以捕获异常 当有了返回值后,我们就可以不用一直等着线程的结果,而是可以先干点别的事情,最后凭future获取结果,例如星期六你去蛋糕店做蛋糕,店员给你一张小票,你这时候可以...
J.U.C相关组件,主要包括FutureTask、Fork/Join框架、BlockingQueue,其中FutureTask讲解时会对比着Callable、Runnable、Future来讲。 这些组件使用场景相对AQS会少一些,但也是J.U.C的重要组成部分,也是需要掌握的 线程调度-线程池 J.U.C里最后一部分:线程池。面试大概率会问到线程池相关的知识点。