2012-10-07 41 views
0

我想通過java main執行搜索方法,並且想實現 超時搜索方法返回,否則它會拋出超時消息。 如何使用線程或計時器類實現這個超時功能?超時搜索方法返回,否則它會拋出超時消息

+0

此示例可能有所幫助:http://www.java2s.com/Code/Java/Threads/Executesataskwithaspecifiedtimeout.htm。還有很多其他例子可以在Google上很容易找到。 –

+0

您可以隨時嘗試[Object.wait(long)](http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait(long)) – MadProgrammer

+0

將來請編輯您的帖子以向我們展示代碼示例,並解釋您嘗試過的以及它如何工作。 – Gray

回答

3

一種方法是將提交您的搜索任務的執行,並call get(timeout); on the returned future - 在本質:

  • 創建一個可贖回你的任務
  • 來看,它與超時
  • 如果超時,取消 - 用於取消工作,你可贖回需要中斷而
Callable<SearchResult> task = ...; 
ExecutorService executor = Executors.newFixedThreadPool(1); 
Future<SearchResult> f = executor.submit(task); 

SearchResult result = null; 
try { 
    result = f.get(2, TimeUnit.SECONDS); //2 seconds timeout 
    return result; 
} catch (TimeOutException e) { 
    //handle the timeout, for example: 
    System.out.println("The task took too long"); 
} finally { 
    executor.shutdownNow(); //interrupts the task if it is still running 
} 
反應