android Callable Future FutureTask 解析
2016-05-16 22:11
429 查看
最近比较公司没什么事做,闲下来,有空就写写博客吧,当是笔记什么的都好。
最近看AsyncTask的源码,看到了FutureTask ,忍不住去学习了一下,下面总结一下:
1.Callable和Future
Callable其实和Runnable没什么不同,只是Runnable没参数返回,Callable有参数返回。而且Callable只能配合ExecutorService来在线程池里使用。
Future表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。
这两个东东都是配合使用额。。。。。
代码:
2.FutureTask
看源码知道,这个东西implments于Runnable和Future接口,集成了Runnable和Future的功能。这个多用于线程状态的获取,主线程可以在完成自己子线程的任务后,再去获取结果。额,这个强大好多。。。
贴贴代码:
最近看AsyncTask的源码,看到了FutureTask ,忍不住去学习了一下,下面总结一下:
1.Callable和Future
Callable其实和Runnable没什么不同,只是Runnable没参数返回,Callable有参数返回。而且Callable只能配合ExecutorService来在线程池里使用。
Future表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。
这两个东东都是配合使用额。。。。。
代码:
class TaskWithResult implements Callable<String> { private int id; public TaskWithResult(int id) { this.id = id; } @Override public String call() throws Exception { return "result of TaskWithResult " + id; } } ExecutorService exec = Executors.newCachedThreadPool(); ; Future<String> result=exec.submit(new TaskWithResult(2)); Log.i("执行结果",result); exec.shutdown();
2.FutureTask
看源码知道,这个东西implments于Runnable和Future接口,集成了Runnable和Future的功能。这个多用于线程状态的获取,主线程可以在完成自己子线程的任务后,再去获取结果。额,这个强大好多。。。
贴贴代码:
ExecutorService executorService= Executors.newFixedThreadPool(5);//创建线程池大小为5的固定线层池 Runnable runnable=new WorkThreadRunnable(1); FutureTask futureTask=new FutureTask(runnable,"测试结果"); executorService.execute(futureTask); sleep(3000); try { String result= (String) futureTask.get();//设定返回的结果为字符串 Log.e("执行结果",result+""); //打印可以看到为"测试结果" Log.e("futureTask", futureTask.isDone()+futureTask.isCancelled());//打印线程执行状态 } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } private class WorkThreadRunnable implements Runnable { private int i; public WorkThreadRunnable(int i){ this.i=i; } @Override public void run() { Log.e("WorkThread", "在执行第" + i + "线程"); sleep(1000*i); } } private void sleep(int time){ try { Thread.sleep(time); } catch (InterruptedException e) { e.printStackTrace(); } }
FutureTask还有一种实例化:FutureTask futureTask=new FutureTask(Callable callable);这个是差不多的,只不过把返回结果塞在了Callable里面的方法返回而已。
相关文章推荐
- Android wpa_supplcant 之--配置文件
- Android学习记录(十四) digest鉴权的文件播放
- Rxandroid中doOnSubscribe()执行默认情况下所在的线程
- Android开发60条技术经验总结
- android开发第一次心的
- Android学习之一
- Android 手把手教您自定义ViewGroup(一)
- android如何在xml中引用内部类的View
- Android常用控件
- Android防止事件重复提交
- Android开发自定义控件实现一个圆形进度条【带数值和动画】
- Android 动画详解
- Android 开源项目浅读-------SwipeMenuListView-重写,第七章,菜单停留和暂停响应
- android天气预报源码
- 记使用Android SQLite遇到的小问题
- Android 连续点击实现一些隐蔽功能
- ViewGroup常用布局操作
- android battery stats
- Android监听回调的一些理解
- Intent