【问题标题】:How to handle timeout a method in java? [duplicate]如何处理java中的方法超时? [复制]
【发布时间】:2014-03-27 17:30:28
【问题描述】:

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

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 分钟后停止操作并像 null 一样手动设置 answers 值。我无法在 this.issueParallelOperation() 方法中进行更改,因为它被许多其他方法调用。谁能建议我一些想法如何在这个 searchItems() 方法中解决这个问题

【问题讨论】:

  • 能否提供 issueParallelOperation 方法的定义(或代码)?通常现代范式是提供一个请求终止(而不是杀死一个线程)的方法调用。您还应该在单独的线程中调用此调用,以便发出这样的“停止”请求。

标签: java timeout timeoutexception


【解决方案1】:

您可以记录函数的开始时间,然后在循环时检查当前时间与开始时间和持续时间。比如:

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

【讨论】:

  • 需要更改原始方法。
  • 啊,我没有注意到 OP 无法更改原始方法。我暂时把答案留给那些可以改变原始方法的人。
猜你喜欢
  • 1970-01-01
  • 2015-01-03
  • 2010-10-05
  • 2021-10-21
  • 2011-05-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多