2013-05-06 5 views
0

코드에서 시간 초과를 구현하려고했습니다. 기본적으로 나는 타임 아웃을 시작하고 타임 아웃이 발생하면 메소드를 호출해야한다.시간 초과 발생 후 메소드 호출

Pseudocode way: 
     in bar function 
      start timeout ---> (at background, if timeout occurs call foo()) 

     in foo function 
      cancel timeout 
      print something 

제한 시간이 초과 된 후 메서드를 호출하는 방법은 무엇입니까?

편집 : 재시작 시간 제한이 있어야합니다. Future는, 비동기 계산의 결과를 나타냅니다 : 당신이 질문 미래의 threads

설명을 참조하시기 바랍니다있는 경우

+2

너는 말을하고 있니? –

+0

@Baadshah 구현 방법을 모른다. 스레드가 유일한 방법이라면 스레드를 의미한다. bar 함수가 스레드가 아닙니다. – user2353516

+0

['java.util.Timer'] (http://docs.oracle.com/javase/7/docs/api/java/util/Timer.html) 또는 Swing, ['javax.swing.Timer'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/Timer.html) – MadProgrammer

답변

0

아마도이 질문

import java.util.concurrent.Callable; 
import java.util.concurrent.ExecutorService; 
import java.util.concurrent.Executors; 
import java.util.concurrent.Future; 
import java.util.concurrent.TimeUnit; 
import java.util.concurrent.TimeoutException; 

public class Test { 
    public static void main(String[] args) throws Exception { 
     ExecutorService executor = Executors.newSingleThreadExecutor(); 
     Future<String> future = executor.submit(new Task()); 

     try { 
      System.out.println("Started.."); 
      System.out.println(future.get(3, TimeUnit.SECONDS)); 
      System.out.println("Finished!"); 
     } catch (TimeoutException e) { 
      System.out.println("Terminated!"); 
     } 

     executor.shutdownNow(); 
    } 
} 

class Task implements Callable<String> { 
    @Override 
    public String call() throws Exception { 
     Thread.sleep(5000); //It means 5 seconds 
     return "Ready!"; 
    } 
} 

에 대답 수 있습니다. 계산이 완료되었는지 확인하고, 완료를 기다리고, 계산 결과를 검색하는 메소드가 제공됩니다. 결과는 계산이 완료되면 get 메소드를 사용하여 검색 할 수 있습니다. 필요할 때까지 준비가 완료 될 때까지 블로킹합니다.

취소는 취소 방법으로 수행됩니다. 작업이 정상적으로 완료되었는지 또는 취소되었는지를 확인하기위한 추가 방법이 제공됩니다. 계산이 완료되면 계산을 취소 할 수 없습니다. 취소 가능성을 위해 Future를 사용하려고하지만 사용 가능한 결과를 제공하지 않으려면 Future 형식의 형식을 선언하고 기본 작업의 결과로 null을 반환 할 수 있습니다.

실행하는 당신이 TimerTask을 예약 할 수있는

간단한 그냥 java.util.Timer를 사용하는 수 있습니다 ... 그것을 달성하기 위해 여러 가지 방법이 많이 아마이 있습니다이 site

+0

이 줄에는'System.out.println (future.get (3, TimeUnit.SECONDS)); – user2353516

+0

편집이 질문을 선택하고 승인 버튼을 클릭하여이 질문을 답변으로 받아들이십시오. 감사와 GBU –