0
我有一个“客户端”EJB
,它调用4 Asynchronous
EJB
s,并且应该让它们全部运行5秒。 5秒钟后,“客户端”EJB收集来自Future
对象的就绪结果,该对象已完成运行,并返回输出。异步EJB最多等待X秒
我有一个问题,在客户端的“等待”部分。我试图调用future.get(5, TimeUnit.MILLISECONDS)
好像有时异步EJB
s 开始运行后超时。 有没有正确的方法来做到这一点?
1)Map
收集Future
对象:
Map<String, Future> futureMap = new HashMap<String, Future>();
for (String userID: users) {
Future<Set<FrontPageData>> test = util.asyncGetData(userID);
futureMap.put(serviceID, test);
}
return futureMap;
2)然后我得到超时输出Future
对象
final long now = Calendar.getInstance().getTimeInMillis();
final long end = now + TimeUnit.SECONDS.toMillis(5)
Map<String, Object> output = new HashMap<String, Object>();
Object data;
for (String userID: futureMap.keySet()) {
Future future= futureMap.get(userID);
try {
//check how much time left till the end
long timeout = end - Calendar.getInstance().getTimeInMillis();
data = future.get(timeout, TimeUnit.MILLISECONDS);
output.put(userID, data);
} catch (Exception e) {//write to logs
}
}
return output;
}
谢谢
我的客户不想等待长时间执行。这并不意味着它不应该等待没有启动执行的服务。 – lili 2012-01-12 15:53:00
我调用future.get(timeout),并等待一部分超时。下次我计算超时时间时(我检查剩余时间还剩多少) – lili 2012-01-12 15:53:25
>我检查剩下多少时间 - 你说得对,傻我 – 2012-01-12 16:36:16