在 Java 中运行采样过程一定时间并返回值



我有一个进行采样的Java方法。 也就是说,它执行以下操作:

TIME = 60 /* seconds */
startTime = now();
count = 0;
while (now() - startTime < TIME) {
    sample = createRandomSample();
    if (satisfiesSomeConditions(sample)) {
       count++;
    }
}
return count;

现在,通常,createRandomSample() 和 satisfiesSomeConditions(sample) 运行得非常快(如在一秒或更短的时间内),因此此代码运行良好。

但是,有时

,其中一个函数可能需要很长时间才能运行。 我怎样才能控制这个采样过程的运行时间不超过TIME的要求。 我不介意它是否比 TIME 长 10%,但我不希望它在 TIME 上运行任意长的时间。

执行人服务似乎太苛刻了。

这更像是我们想在一个单独的线程上运行采样,然后轻轻地告诉该线程停止采样并给出它当前具有的任何结果。

您可以使用

FutureTask .像这样:

FutureTask<Void> futureTask = new FutureTask<Void>(new Callable<Void>() {
    @Override
    public Void call() throws Exception {
        doStuff();
        return null;
    }
    });
futureTask.run();
futureTask.get(60, TimeUnit.SECONDS); //handle exceptions

get() 方法在可调用对象完成后终止。如果这种情况发生在超时之前,一切都很好。如果没有,它会抛出一个TimeoutException在这种情况下你必须抓住。

最新更新