永发信息网

java future函数的作用

答案:3  悬赏:80  手机版
解决时间 2021-04-02 21:36
java future函数的作用
最佳答案
submit 一个请求之后,你可以在 future.get() 上阻塞等待也可以有一个 while 循环,不停地 future.isDone() 再检测是否任务完成,如果完成再来 future.get() 就立马得到结果了。追问要是当前线程循环一次之后,再来执行这么一条语句,会得到什么样的结果。追答这样的设计一般都约定,当使用 get() 阻塞式访问时,返回后那个任务已经完成了 (不管结果是 isDone() 还是 isCancelled())。

而当我们不是阻塞地,比如 while(!future.isDone()) { Result r = future.get(1000, TimeUnit.XYZ))} 来访问的话,除非这个类是你自己写的,否则你应该按人家提供这个 Executor 和 Future 的 API 上说的来了解它当前是什么状态。假设 future.isDone 返回 false,你不应该期望你能从中得到什么。

这个 Future 并没有说明它支持“当任务还在跑并且尚未跑完成时也会告诉你中间的状态值”。所以你说的跑了一个循环(我假设你是在说你的任务是跑多个循环,并且你期望在中间的某个时刻知道里面走到哪一步了),那只有这个 Future 和 Executor 及 那个 Runnable 实现类知道具体细节,它们应该在 API 文档中说明是否达到你的要求。

而当 future.isDone() 已经完成了,那一般会默认除非你丢弃了结果,否则那个结果应该保持不变才对,如果在 done 之后的某个条件之后结果会变的话,一般应该在 API 文档中说明这个约定。
全部回答
这个是定义一个futuer ,而Future还是泛型,不看代码,不知道有什么用的
在并发编程时,一般使用runnable,然后扔给线程池完事,这种情况下不需要线程的结果。
所以run的返回值是void类型。
如果是一个多线程协作程序,比如菲波拉切数列,1,1,2,3,5,8...使用多线程来计算。
但后者需要前者的结果,就需要用callable接口了。
callable用法和runnable一样,只不过调用的是call方法,该方法有一个泛型返回值类型,你可以任意指定。
线程是属于异步计算模型,所以你不可能直接从别的线程中得到函数返回值。
这时候,Future就出场了。Futrue可以监视目标线程调用call的情况,当你调用Future的get()方法以获得结果时,当前线程就开始阻塞,直接call方法结束返回结果。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
三工序雕刻机 自动上下料三工序数控开料机多
已知角a与角b互补,且角a比角b大30度,求角a
Redm是谁
雄黄(水飞)是什么意思对身体有害吗?
中国大别山绿色商城地址在哪,我要去那里办事
我买了翻板手机应怎么办
鄂卫消证字(2005)第0031号产品名称是什么
求水族箱里供氧气的那个冒水泡的声音
若乾隆的生母真是雍正野合的某位宫女,那么这
栾川西餐厅排名
第五套人民币什么是豹子号顺子号
适合你的男人韩语
抚顺县幼儿园地址在哪,我要去那里办事,
第一次做很快就射了,她还想要,怎么让她得到
所谓的崇祯手下无治国之才时,我感觉是非常逗
推荐资讯
预制式整体卫生间的价格高吗
我要做物业保安标兵
在可以放大4倍的放大镜中看50°的角,你看到
古代忠诚的护卫都有谁
五寨县新寨乡殷家湾村民委员会地址有知道的么
鲁提辖打死镇关西之后,去了哪?他在那里又做
立式恒压消防切线泵(自喷)XBD30-40-HY其型号
这是exo-m里的TAO什么时候的头型
请各位有谁可帮忙提供欧美首饰图片的网站?
供仙家的香炉是越大越好是越小越好
HDMI接口要授权金是什么意思啊?
三地2015第一期到2016年175期的出号
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?