Java类/包,允许包装运行一个长操作并在超时的情况下运行它



我的代码应该执行得相当快,但偶尔可能需要很长时间才能执行并产生结果。我想限制该操作的持续时间,如果它的运行时间超过给定的时间限制,则中止它。我希望代码看起来像

Supplier<T> longRunningFoo = () -> {...}; // this may take a while to run
LongOpRunner runner = new LongOpRunner(longRunningFoo); // <-- some wrapper that limits operation duration
try {
T result = runner.call(10000 /* ms */); // abort after 10000 milliseconds
} catch (LongOpTimeout e) {
// handle timeout exception when "foo" gets aborted
}

在我开始编写自己的库之前,我有兴趣看看是否有现有的库提供此功能。

您可以使用 Future 中内置的 Java,它提供了超时工具。请参阅下面的小代码片段。

ExecutorService ex = Executors.newSingleThreadExecutor();
Future<?> future = ex.submit(new Runnable() {
public void run() {
try {
//Do some long running operations
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Completed operation");
}
});
Object someObject = future.get(10, TimeUnit.SECONDS);

您也可以参考下面的链接以获取进一步的参考。

您可以使用 ExecutorService.submit(Callable task(,然后在结果上调用 Future.get(long timeout, TimeUnit unit(。

最新更新