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

Kill the function in one iteration and proceed to the next iteration after X seconds in Java

如果一个函数耗时太长,如何在一次迭代中跳过或杀死一个函数,然后进行下一次迭代?

我的示例代码如下

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

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

你可以这样做:

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