2014-02-25 2 views
-1

이있는 그것이 할 때까지 반복 계속해서 그렇지 않으면 어떤 결과를 찾을 경우자바에서 메소드를 타임 아웃 처리하는 방법은 무엇입니까? 나는 메소드를 호출하고

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로 설정하면 이 설정됩니다. this.issueParallelOperation() 메서드는 다른 많은 메서드에서 호출 할 때 변경되지 않습니다. 아무도 나에게이 문제를 해결할 방법을 제안 해 줄 수 있습니까? 검색 항목 ()

+0

issueParallelOperation 메소드 (또는 코드)에 대한 정의를 제공 할 수 있습니까? 일반적으로 현대 패러다임은 스레드를 죽이는 대신 종료를 요청하는 메서드 호출을 제공하는 것입니다. 또한이 호출을 별도의 스레드에서 호출하여 이러한 "중지"요청을 할 수 있도록해야합니다. – ErstwhileIII

답변

0

함수의 시작 시간을 기록한 다음 루프 할 때마다 시작 시간과 지속 시간을 비교하여 현재 시간을 확인할 수 있습니다 . 예 :

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

원본 방법을 변경해야합니다. – Basilevs

+0

아, 나는 OP가 원래의 방법을 바꿀 수 없다는 것을 알지 못했다. 나는 원래 방법을 바꿀 수있는 사람들을 위해 지금 당장 대답을 남겨 둘 것입니다. –

관련 문제