如何得到线程执行完之后返回的结果
2015-12-22 17:47
330 查看
在实际开发过程中,很多时候要将子线程执行完后返回的结果给到主线程里。具体怎么实现呢?这里给出3个实现方法!
1、根据反射原理实现
很多人都习惯在调用线程的时候,通过构造方法给线程传递参数,这里我们在构造方法里传两个参数,一个是类 callback,一个是方法名 method。这样我们在线程的run方法最后 执行callback.getMethod(method).invoke(null); 这样就可能执行你指定的某个类下的某个方法了!
2、Callable+ScheduledThreadPoolExecutor实现
这个是在Java1.5以后,添加了ScheduledThreadPoolExecutor和callable两个组件(接口),ScheduledThreadPoolExecutor大家可能比较熟悉,它的优点就不说了;它用来执行线程进行调度的时候,有一个方法.schedule(Callable<Object> callable, long delay, TimeUnit unit),注意:这里的参数是Callable而不是Runnable,大家千万不要被它唬住了,其实它和Runnable差不多,都能实现有个线程,只不过Callable可以添加返回值!这正是我们想要的!
所以我们在用ScheduledThreadPoolExecutor调度线程得到返回值 ScheduledFuture后执行get()方法,就可以得到返回值了。
3、第三种就是自定义接口,把接口当初参数传进线程里,然后在线程完成的地方调用接口的方法,这个方法也是最常用的
1、根据反射原理实现
很多人都习惯在调用线程的时候,通过构造方法给线程传递参数,这里我们在构造方法里传两个参数,一个是类 callback,一个是方法名 method。这样我们在线程的run方法最后 执行callback.getMethod(method).invoke(null); 这样就可能执行你指定的某个类下的某个方法了!
2、Callable+ScheduledThreadPoolExecutor实现
这个是在Java1.5以后,添加了ScheduledThreadPoolExecutor和callable两个组件(接口),ScheduledThreadPoolExecutor大家可能比较熟悉,它的优点就不说了;它用来执行线程进行调度的时候,有一个方法.schedule(Callable<Object> callable, long delay, TimeUnit unit),注意:这里的参数是Callable而不是Runnable,大家千万不要被它唬住了,其实它和Runnable差不多,都能实现有个线程,只不过Callable可以添加返回值!这正是我们想要的!
所以我们在用ScheduledThreadPoolExecutor调度线程得到返回值 ScheduledFuture后执行get()方法,就可以得到返回值了。
3、第三种就是自定义接口,把接口当初参数传进线程里,然后在线程完成的地方调用接口的方法,这个方法也是最常用的
相关文章推荐
- 自己做得json测试类,包含JSONArray,JSONObject,Gson基本使用方法
- mysql表关联中的索引使用情况
- 从这些方面锻炼成为优秀的软件工程师
- mysql表关联中的索引使用情况
- version接口
- android中坐标系详解
- 第六部分: 大数据监管和信息单一视图监管
- [转]Kerberos协议
- 获取手机所有联系人及搜索
- iPhone/iOS开启个人热点的相关位置调整小结
- 实现按钮拖动到底部,与底部按钮互换的功能
- Spark调度系列-----5.Spark task和Stage的跳过执行(ui显示task和stage skipped)
- SSL与TLS的区别以及介绍
- 总结一下打字
- (工具准备)Vim
- android-async-http
- iOS 播放视频时隐藏屏幕上方的状态栏
- 杭电ACM1312(dfs)
- 标签页,程序开始导航
- Shell集合运算