6.AsyncTask中的FutureTask和Callable
来源:互联网 发布:云豹直播app源码 编辑:程序博客网 时间:2024/06/06 15:03
1.Callable接口
public interface Callable<V> { V call() throws Exception;}
Callable接口只定义了一个函数,从接口的定义当中我们可以看出Callable接口是有返回值的。那么我们如何获取它的返回值呢,这就需要用到java设计好的的一个类FutureTask。
2.Future 接口
Future 接口主要提供了一下几个方法
//取消线程的执行 boolean cancel(boolean mayInterruptIfRunning); //判断是否停止执行 boolean isCancelled(); //判断线程是否执行完成 boolean isDone(); //获取返回值 V get() throws InterruptedException, ExecutionException; V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException;
Future接口主要提供了以上几种方法,而FutureTask是它的唯一实现类。
3.案例
(1)首先实现Callable接口
//异步任务 static class Task implements Callable<Integer>{ //返回异步任务的执行结果 @Override public Integer call() throws Exception { int i = 0; for (; i < 10; i++) { try { System.out.println(Thread.currentThread().getName() + "_"+i); Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } return i; } }
(2)将异步任务当做参数传入到FutureTask中
Task work = new Task(); FutureTask<Integer> future = new FutureTask<Integer>(work){ //异步任务执行完成,回调 @Override protected void done() { try { //任务完成调用get()方法就可以得到返回值。 System.out.println("done:"+get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } }; //放入线程池中执行。 ExecutorService executor = Executors.newCachedThreadPool(); executor.execute(future);
当然我们调用future的cancel()方法可以停止任务的执行。有兴趣的同学可以试一下。
阅读全文
0 0
- 6.AsyncTask中的FutureTask和Callable
- Android并发-Future,FutureTask和Callable及AsyncTask
- Callable、Future和FutureTask
- Callable、Future和FutureTask
- Callable和Future、FutureTask
- Callable、Future和FutureTask
- Callable、Future和FutureTask
- Callable、Future和FutureTask
- Callable、Future和FutureTask
- Callable 和 FutureTask
- Callable、Future和FutureTask
- Callable、Future和FutureTask
- AsyncTask分析(二)---Future、Callable、FutureTask
- Callable和Future和FutureTask
- Callable, Future和FutureTask简述
- Callable、Future和FutureTask区别
- Callable、Future和FutureTask使用说明
- Runnable、Callable、Future 和 FutureTask
- Windows环境下配置php的curl扩展
- redis源码安装出现fatal error: jemalloc/jemalloc.h: No such file or directory
- ALSA声卡驱动中的DAPM详解之五:建立widget之间的连接关系
- Pyhotn 中编码的问题:'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)的错误
- JavaScript原型对象
- 6.AsyncTask中的FutureTask和Callable
- 解决微信支付 errCode返回-1
- emmc和ssd的区别
- 【学习opencv】opencv人脸检测
- 微信小程序入门——页面跳转、数据传递、数据接收
- oj网站的训练题:输入两个数A,B,输出A+B的值
- Hibernate入门七(关联对象)
- ALSA声卡驱动中的DAPM详解之六:精髓所在,牵一发而动全身
- erlang node