Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中处理超时方法?_Java_Timeout_Timeoutexception - Fatal编程技术网

如何在java中处理超时方法?

如何在java中处理超时方法?,java,timeout,timeoutexception,Java,Timeout,Timeoutexception,我正在调用一个方法,其中有一个循环,只有当它找到一些结果时才会结束,否则它将继续循环,直到找到为止 public Collection<Serializable> searchItems(Collection<String> tags) { Collection<Serializable> answers = (Collection<Serializable>) this.issueParallelOperation(ta

我正在调用一个方法,其中有一个循环,只有当它找到一些结果时才会结束,否则它将继续循环,直到找到为止

public Collection<Serializable> searchItems(Collection<String> tags) {
    Collection<Serializable> answers = (Collection<Serializable>) 
        this.issueParallelOperation(tags, RemoteOperation.getIndex, 
        null, null, null, null, AggregationStrategy.joinCollection);
}

this.issueParallelOperation方法中的代码将继续循环,直到找到结果。我想在1分钟后停止操作,并手动将answers值设置为null。我无法在此.issueParallelOperation方法内进行更改,因为它被许多其他方法调用。任何人都可以向我推荐一些如何用这个searchItems方法解决这个问题的方法吗?你可以记录函数的开始时间,然后在循环时对照开始时间和持续时间检查当前时间。比如:

public Object functionWithTimeout(long duration){
   long start = System.currentTimeMillis();

   while(someCriteria){
      if(System.currentTimeMillis() - start > duration){
         //the function has timed out
         break;
      }

      //whatever code you want to repeat until the timeout
   }

   return null;
}

您能否提供issueParallelOperation方法或代码的定义?通常,现代范式是提供一个方法调用来请求终止,而不是终止线程。您可能还应该在单独的线程中调用此调用,以便发出这样的停止请求。需要更改原始方法。啊,我没有发现OP无法更改原始方法。我现在就把答案留给那些可以改变原来方法的人。