如何在 ceratin 时间之后终止特定的代码块,即使在循环中也是如此



例如,我有一些代码块需要 30 多秒才能执行,但如果它需要超过 30 秒,我想停止它。我正在尝试使用 executor.shutdown((, executor.awaitTermination(30, TimeUnit.SECONDS( 和 executor.shutdownNow((; 但我无法理解我必须在哪里编写我想在特定时间后终止的代码块。请举一个完美的例子。

这很简单:当使用线程时,没有可靠的方法来杀死该线程(例如,请参阅此处(。

唯一的选择:在另一个进程中启动另一个JVM - 因为实际上你可以杀死。详情请看这里。

当然 - 这不是要走的路。更好的方法是以定期检查"取消"命令的方式实现长时间运行的任务。

使用上述方法的方法,您只需将任务添加到executor,然后在下一行代码中放入executor.shutdown(); 它限制您的执行者执行其他任务,然后您的实际放置executor.awaitTermination(30, TimeUnit.SECONDS)设置"计时器"以等待任务在此期间完成

一个简单的萨姆勒代码狙击手:

ExecutorService taskExecutor = Executors.newFixedThreadPool(1);
taskExecutor.execute(new MyTask());
taskExecutor.shutdown();
try {
  taskExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
  ...
}

相关内容

  • 没有找到相关文章

最新更新