ScheduledExecutorService 超时后结束
ScheduledExecutorService end after a timeout
美好的一天!我有调度程序,我需要检查它的工作时间。我怎样才能做到这一点?当调度程序工作超过 5 分钟时,我需要 return 来自 someFunction() 的错误
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
public int someFunction() {
ScheduledFuture<Integer> future =
scheduler.schedule(new ScheduledPrinter(), 10, TimeUnit.SECONDS);
if (scheduler.isShutdown()) {
return future.get();
}
}
private class ScheduledPrinter implements Callable<Integer> {
public Integer call() throws Exception {
// do something
if (!serverResponse.getErrorData().equals("QueueIsNotReady")) {
scheduler.shutdown();
return getResponse();
}
return null;
}
}
您可以使用以下选项:
scheduler.awaitTermination(5, TimeUnit.MINUTES)
ScheduledFuture<Integer> future =
scheduler.schedule(new ScheduledPrinter(), 10, TimeUnit.SECONDS);
if (!scheduler.awaitTermination(5, TimeUnit.MINUTES)) {
throw new Exception("task did not complete");
}
future.get(5, TimeUnit.MINUTES)
。此方法允许您为其他任务重用调度程序:
ScheduledFuture<Integer> future =
scheduler.schedule(new ScheduledPrinter(), 10, TimeUnit.SECONDS);
future.get(5, TimeUnit.MINUTES)); // this will throw TimeoutException after 5 minutes
安排另一个任务到 运行 在 5 分钟内检查第一个任务的状态。该方法可用于超时的异步处理。在这种情况下,someFunction
将立即 return:
ScheduledFuture<Integer> future =
scheduler.schedule(new ScheduledPrinter(), 10, TimeUnit.SECONDS);
scheduler.schedule(() -> {
if (!future.isDone()) {
future.cancel(true); // cancel task if it runs more than 5 minutes
}
}, 5, TimeUnit.MINUTES);
美好的一天!我有调度程序,我需要检查它的工作时间。我怎样才能做到这一点?当调度程序工作超过 5 分钟时,我需要 return 来自 someFunction() 的错误
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
public int someFunction() {
ScheduledFuture<Integer> future =
scheduler.schedule(new ScheduledPrinter(), 10, TimeUnit.SECONDS);
if (scheduler.isShutdown()) {
return future.get();
}
}
private class ScheduledPrinter implements Callable<Integer> {
public Integer call() throws Exception {
// do something
if (!serverResponse.getErrorData().equals("QueueIsNotReady")) {
scheduler.shutdown();
return getResponse();
}
return null;
}
}
您可以使用以下选项:
scheduler.awaitTermination(5, TimeUnit.MINUTES)
ScheduledFuture<Integer> future = scheduler.schedule(new ScheduledPrinter(), 10, TimeUnit.SECONDS); if (!scheduler.awaitTermination(5, TimeUnit.MINUTES)) { throw new Exception("task did not complete"); }
future.get(5, TimeUnit.MINUTES)
。此方法允许您为其他任务重用调度程序:ScheduledFuture<Integer> future = scheduler.schedule(new ScheduledPrinter(), 10, TimeUnit.SECONDS); future.get(5, TimeUnit.MINUTES)); // this will throw TimeoutException after 5 minutes
安排另一个任务到 运行 在 5 分钟内检查第一个任务的状态。该方法可用于超时的异步处理。在这种情况下,
someFunction
将立即 return:ScheduledFuture<Integer> future = scheduler.schedule(new ScheduledPrinter(), 10, TimeUnit.SECONDS); scheduler.schedule(() -> { if (!future.isDone()) { future.cancel(true); // cancel task if it runs more than 5 minutes } }, 5, TimeUnit.MINUTES);