如何处理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中的方法超时? [复制]的主要内容,如果未能解决你的问题,请参考以下文章