【发布时间】:2011-04-08 10:34:09
【问题描述】:
一旦我的报告状态完成,我将调用外部 api 来获取报告状态,然后我应该继续获取结果到目前为止我所做的是添加了一个睡眠,但它是一个阻塞调用,并且报告需要大约一半小时完成。所以我需要一种方法来解锁我的下一步。谁能建议我如何做到这一点?
String reportStatus = client.ReportStatus(jobId).getStatus();
while(reportStatus != "Completed"){
int seconds = 5;
System.out.println("Waiting:" + seconds);
try {
Thread.sleep(seconds*5);
}
catch(InterruptedException e){
System.out.println("Done");
}
reportStatus = client.ReportStatus(jobId).getStatus();
}
final FetchReportResult reportValues = client.fetchReport(jobId);
【问题讨论】:
-
reportStatus != "Completed"错误,你应该使用(!reportStatus.equals("Completed"))来比较字符串。 -
你贴的代码看起来不错,你说的解锁是什么?报告完成后你会收到一些事件吗?
-
Yes.. 所以你可以假设我提交了一个查询,我等待它的状态从挂起->执行->完成。一旦查询完成,只有我可以从另一个 API 获取查询结果。而不是每次都睡25秒..我想使用线程,这样oen线程将读取状态,如果状态完成,另一个线程将获取结果..我们如何实现这一点的任何想法..我是否必须存储这些状态在我的本地数据库中,并有两个线程读取值
标签: java multithreading call blocking