关于java:限制函数调用的时间

Limit time on a functioncall

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How to timeout a thread

我正在使用函数调用在树中进行递归搜索。 它在类变量中设置最佳答案,函数本身不返回任何内容。

所以我想限制该功能的允许时间。 如果时间已经用完,它就会停止并且线程被破坏。 如果我想将呼叫限制为两秒钟,我该怎么办:

1
runFunction(search(),2000);


假设您使用的是Java 5或更高版本,我将使用ExecutorService接口和submit方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
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来调整线程以返回值。