在一次迭代中终止函数,并在Java中的X秒后继续下一次迭代

时间:2015-04-13 20:09:19

标签: java multithreading scheduled-tasks

如果一个迭代花费太长时间,如何跳过或终止一个函数,然后继续下一次迭代?

我的示例代码如下。

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
 } 
}

2 个答案:

答案 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)

将查找方法放入可调用对象,并将其发送到执行程序服务。存储返回的未来。然后经常轮询其状态。如果完成,继续下一次迭代。如果不是,并且时间小于最大允许时间,请休眠一会儿。如果时间大于最大允许时间,则取消任务,抛出异常,然后继续循环。