java future函数的作用
答案:3 悬赏:80 手机版
解决时间 2021-04-02 21:36
- 提问者网友:心牵心
- 2021-04-02 03:33
java future函数的作用
最佳答案
- 五星知识达人网友:轮獄道
- 2021-04-02 04:57
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 文档中说明这个约定。
而当我们不是阻塞地,比如 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 文档中说明这个约定。
全部回答
- 1楼网友:雾月
- 2021-04-02 05:37
这个是定义一个futuer ,而Future还是泛型,不看代码,不知道有什么用的
- 2楼网友:西岸风
- 2021-04-02 05:31
在并发编程时,一般使用runnable,然后扔给线程池完事,这种情况下不需要线程的结果。
所以run的返回值是void类型。
如果是一个多线程协作程序,比如菲波拉切数列,1,1,2,3,5,8...使用多线程来计算。
但后者需要前者的结果,就需要用callable接口了。
callable用法和runnable一样,只不过调用的是call方法,该方法有一个泛型返回值类型,你可以任意指定。
线程是属于异步计算模型,所以你不可能直接从别的线程中得到函数返回值。
这时候,Future就出场了。Futrue可以监视目标线程调用call的情况,当你调用Future的get()方法以获得结果时,当前线程就开始阻塞,直接call方法结束返回结果。
所以run的返回值是void类型。
如果是一个多线程协作程序,比如菲波拉切数列,1,1,2,3,5,8...使用多线程来计算。
但后者需要前者的结果,就需要用callable接口了。
callable用法和runnable一样,只不过调用的是call方法,该方法有一个泛型返回值类型,你可以任意指定。
线程是属于异步计算模型,所以你不可能直接从别的线程中得到函数返回值。
这时候,Future就出场了。Futrue可以监视目标线程调用call的情况,当你调用Future的get()方法以获得结果时,当前线程就开始阻塞,直接call方法结束返回结果。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯