如何处理java中的方法超时? [复制]

Posted

技术标签:

【中文标题】如何处理java中的方法超时? [复制]【英文标题】:How to handle timeout a method in java? [duplicate] 【发布时间】: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 方法的定义(或代码)?通常现代范式是提供一个请求终止(而不是杀死一个线程)的方法调用。您还应该在单独的线程中调用此调用,以便发出这样的“停止”请求。 【参考方案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 无法更改原始方法。我暂时把答案留给那些可以改变原始方法的人。

以上是关于如何处理java中的方法超时? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 QTcpServer 中的 TLS 握手超时?

使用 ActiveMerchant 时如何处理超时?

python操作es如何处理timeout超时的问题

微服务架构中的分布式事务,如何处理超时和失败的提交

如何处理 urllib2 套接字超时?

golang channel 超时如何处理