例如,我有一些代码块,执行时间超过30秒,但如果需要超过30秒,我想停止它。我正在尝试使用executor.shutdown(),executor.awaitTermination(30,TimeUnit.SECONDS)和executor.shutdownNow();但我无法理解我必须在特定时间后编写我想要终止的代码块。请举一个完美的例子。
答案 0 :(得分:0)
这很简单:当使用线程时,没有可靠的方法可以杀死该线程(例如,请参阅here)。
唯一的选择:在另一个 进程中启动另一个 JVM - 因为您实际上可以 kill 。有关详细信息,请参阅here。
当然 - 这不是要走的路。更好的方法是以定期检查"取消"的方式实施您的长期运行任务。例如。
答案 1 :(得分:0)
使用上述方法的方法,您只需将任务添加到executor
,然后在下一行代码executor.shutdown();
中限制执行者执行其他任务然后实际执行将executor.awaitTermination(30, TimeUnit.SECONDS)
设置为“计时器”以等待在此期间完成任务
一个简单的samle代码snipet:
ExecutorService taskExecutor = Executors.newFixedThreadPool(1);
taskExecutor.execute(new MyTask());
taskExecutor.shutdown();
try {
taskExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
...
}