2013-05-06 69 views
0

我試圖在代碼中實現超時。基本上我想開始超時,如果發生超時,它應該調用一個方法。發生超時後調用方法

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

     in foo function 
      cancel timeout 
      print something 

如何在超時後調用方法?

編輯:我應該有能力重新啓動超時。 Future表示異步計算的結果:

+2

你在說什麼線? – 2013-05-06 05:42:46

+0

@Baadshah我不知道如何實現,如果唯一的方法是線程,okey我的意思是線程。 bar函數不是線程 – user2353516 2013-05-06 05:44:54

+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 2013-05-06 06:01:43

回答

0

也許如果您有疑問,請參照未來的threads

解釋這可能會回答你的問題

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。

請參照本site

+0

在這行'System.out.println(future.get(3,TimeUnit.SECONDS));'它在睡覺嗎? – user2353516 2013-05-06 05:55:15

+0

如果您認爲這是您的正確答案,請進行編輯並點擊批准按鈕以接受此問題作爲您的答案。謝謝和GBU – 2013-05-06 05:57:41

相關問題