java线程创建方法只有两个?NO! 异步计算的结果如何拿到?
来源:互联网 发布:日本音乐知乎 编辑:程序博客网 时间:2024/05/22 15:36
记得以前电话面试的时候,面试官出了个java有哪几种方法可以创建线程的问题,我心想这么简单的问题还能难倒本宝么,随口就答出了Thread和runnable方式,后面快结束时他说你这个问题只答对一半,还有其他方式可以创建,自己回去查资料。
这一查才知道原来java的concurrent包下有个Callable接口,通过他也可以创建线程并执行,
名称上看起来和Runnable接口有点像,实际功能也类似,不过callable功能比runnable有两个主要的增强点,他可以抛出异常,可以有返回值
看到这里是不是有点惊喜,以往在使用thread或者runnable时,痛点就是线程之间异步,主线程里拿不到新起线程的返回值,也不能catch到新线程的异常,
下面看代码如何使用Callable满足我们的要求:
可以看出上段代码中我们使用了FutureTask对象来接受异步执行结果,这个类实现了Future接口(也是concurrent包下的),这个接口的部分介绍如下:
Future<V> 说明------>V
: 此 Future 的 get 方法所返回的结果类型
表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。
计算完成后只能使用 get 方法来获取结果。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
看到这里大家已经明白如何使用Callable了吧,但是有人会有疑问了,上面那段代码绕来绕去还不如不用线程直接执行呢,说得对,因为future.get()方法会等待线程计算结果,
我们可以在线程启动后,调用get方法获取结果之间进行其他操作
- java线程创建方法只有两个?NO! 异步计算的结果如何拿到?
- Java创建线程的两个方法
- java创建线程的两个方法
- Java创建线程的两个方法
- java创建线程的两个方法
- Java创建线程的两个方法
- Java创建线程的两个方法
- Java创建线程的两个方法
- Java创建线程的两个方法
- Java创建线程的两个方法
- Java创建线程的两个方法
- Java创建线程的两个方法
- Java创建线程的两个方法
- Java创建线程的两个方法
- Java创建线程的两个方法
- Java创建线程的两个方法
- Java创建线程的两个方法
- Java创建线程的两个方法
- java内存分配与垃圾回收
- C代码优化方案
- 百度地图导航工具类,包含骑行步行及驾车导航
- nginx 启动 停止
- 举起双手
- java线程创建方法只有两个?NO! 异步计算的结果如何拿到?
- MAP
- 数据结构笔记(1)递归
- 试水VISA编程(2)——一键读取示波器数据
- 图像显示—关于MATLAB里显示.mat形式的图像
- 解决mysql"Access denied for user'root'@'IP地址'"问题
- Vue2.0 框架配置:vue-cli + vue-router + vuex
- git记住账号密码
- 数据结构笔记(2)线性表