java.util.concurrent.Future.isDone()是否有必要

Future.get()方法会一直阻塞,直到有数据返回,这时候isDone()是true.那么在get()之前判断isDone()是否有必要?如下:
[code="java"]
if (!future.isCancelled())
{
HotelSearchResponse response = null;
if (future.isDone()) //这里有没有必要判断
{
if (future.get() != null)
{
response = future.get();
}

else
{
while (!future.isDone())//这个while有没有必要
{
if (future.get() != null)
{
response = future.get();
}
}
}
}
[/code]

你用future的意思应该是,不管请求谁先发送的,先处理就先返回谁的reponse
最后再把所有的reponse集合处理

如果是要做Client/Server的话 为什么不用Socket做多线程呢?
这才是正道吧

也许你的设计是必须用future的
首先,只要你自己不cancel,就不会有人cancel,就不需要判断啊
其次你完全不能判断get是否为null
因为get方法一定要返回一个值,不返回他自己就不会停,除非你cancel
但是,如果你返回的东西就是null,那么也是一个reponse啊
get方法本身的初始值并不是null,并且null不能代表他没有get东西
如何代表他get成功了?就是用isDone判断

当有多个请求时候,每个请求调用future
你只要写 reponse = future.get()
然后让future自己处理,只要判断reponse是否为你需要的,比如null
最后再把多个reponse整合

因为还设定了,如果没有reponse也就是说get不到东西
那么要抛异常
你可以给get设置响应时间,比如1分钟还没有get就cancel
然后抛异常(响应超时)什么的

不明白你为什么要判断future.get()是否为null
因为不管怎么样都要得到future.get()的结果
而且把一个会阻塞的线程放在if里面判断,有点。。。
另外,只要你自己不cancel的话,也不需要判断是否cancel吧
isDone倒是可以判断,也要看你的具体设计
concurrent类最方便了
你只要把可以稍候做的事情放在future里,剩下他自己就帮你解决
不需要这么麻烦
-------------------------------

话说,你的设计思路到底是什么呢

学习了。

[url]http://surenpi.com[/url]

如果你有多个Future,比如List那就有必要判断isDone()了啊,哪个Future完工先干那个,不然List队列里后面的比前面的先完工不能一直等着前面的吧