2012-09-07 24 views
0

可能重複:
How to timeout a thread限制時間上functioncall

我用一個函數調用,使在樹上進行遞歸搜索。它在類變量中設置最佳答案,而函數本身不返回任何內容。

所以我想限制該功能的允許時間。如果時間用完了,它會停止並且線程被銷燬。我應該怎麼做,如果我想呼叫限制兩秒鐘:

runFunction(search(),2000); 
+1

看看這個問題:http://stackoverflow.com/questions/2275443/how-to-timeout-a-thread – japreiss

回答

1

假設你正在使用Java 5或更高,我會使用的ExecutorService接口和提交方法:

ExecutorService executor = Executors.newSingleThreadExecutor(); 
Future<?> future = executor.submit(new Runnable() { 

@Override 
public void run() { 
    search(); 
    } 
}); 
try { 
    future.get(2000, TimeUnit.SECONDS); 
} catch (TimeoutException e) { 
    // handle time expired 
} 

使用此方法還可以通過提交Callable而不是Runnable來調整線程以返回值。

+0

這隻會在'search'是可中斷的時候才起作用。 – assylias

+0

完美!我需要銷燬線程還是自動完成? – user1506145