如果一个迭代花费太长时间,如何跳过或终止一个函数,然后继续下一次迭代?
我的示例代码如下。
for (String word : wordSet){
try{
lookup(word);
// if (lookup(word)>2 seconds){
// throw an exception. Skip this word and check next word}
}
catch(Exception TimeoutException){
slowWordSet.add(word);
// check next word
}
}
答案 0 :(得分:1)
您可以执行以下操作:
final ExecutorService executorService = Executors.newSingleThreadExecutor();
Future<?> future = null;
try {
future = executorService.submit(() -> {
lookup(word);
});
future.get(2, TimeUnit.SECONDS);
}catch(Exception e){
if(future != null){
future.cancel(true);
}
slowWordSet.add(word);
}
答案 1 :(得分:0)
将查找方法放入可调用对象,并将其发送到执行程序服务。存储返回的未来。然后经常轮询其状态。如果完成,继续下一次迭代。如果不是,并且时间小于最大允许时间,请休眠一会儿。如果时间大于最大允许时间,则取消任务,抛出异常,然后继续循环。