当前位置: 首页 > 知识库问答 >
问题:

如何停止计划ScheduledExecutorService

汝吕恭
2023-03-14

我正在使用ScheduledExecutorService并对其进行初始化(ScheduledExecutorService scheduledThreadPool=Executors.NewScheduledThreadPool(20);)这样我就不会每次都创建新线程。然后,我使用计划“executorService.schedule(new Runnable(),20,timeUnit.seconds)”来安排任务;

我对此有两个问题:1。我如何关闭一个线程一旦它的工作结束。如果我试图在第一次执行后调用shutdown方法,我会得到java.util.concurrent.RejectedExecutionException错误(因为主要执行程序是shutdown)。2.一段时间后,我如何取消一个长时间运行的线程?让我们假设,如果一个请求被发送,而一个线程在执行过程中被卡住了,我应该如何在一段时间后取消它。

共有1个答案

郭子航
2023-03-14

结束长时间运行的线程的最好方法是从runnable#run函数返回。任何中断或取消的尝试可能并不总是奏效的。

 类似资料:
  • 问题内容: 我正在使用类,并且正在使用其schedule方法执行某些任务,但是在执行了6次之后,我必须停止其任务。 我该怎么办? 问题答案: 在某个地方保留对计时器的引用,并使用: 停止所做的一切。您可以将此代码放在正在执行的任务中,以计算您经过的次数,例如

  • 我正在使用@Scheduled annotation运行cron作业。调度工作了一段时间,然后停止工作。我将给出我的代码的简化片段: 这是调度程序: 这是由调度器执行的任务 “开始代理”和“结束代理”的记录次数相同。所以,每一个日程安排都会正确地结束。 “开始任务”和“结束任务”的记录次数相同。所以,毫无疑问,“任务”并不是阻止事情。 但是过了一段时间就停止记录了。有什么问题吗? 这里,TASK_

  • 问题内容: 我已将一个WAR文件部署到Tomcat服务器,该类之一将在启动时调用,然后init()方法将安排一个计时器,每5小时触发一次以执行一些任务。 我的init()代码如下所示: 我的应用程序运行没有问题,但是当我使用 /etc/init.d/tomcat7 stop 关闭Tomcat时,我检查了日志(catalina.out),它具有以下条目: 严重:Web应用程序[/ MyApplica

  • 问题内容: 我已经使用Spring Framework的注释创建了一个简单的计划任务。 现在,当不再需要时,我想停止此任务。 我知道在此方法开始时可能有一种方法可以检查一个条件标志,但这不会停止执行此方法。 Spring提供了什么来停止任务? 问题答案: 选项1:使用后处理器 为应停止调度的bean 提供并显式调用。 选项2:维护目标豆与其未来的映射 当必须停止对bean的调度时,可以查找该映射以

  • 我使用Spring Framework的注释创建了一个简单的计划任务。 我知道可以有一个选择在这个方法开始时检查一个条件标志,但这不会停止这个方法的执行。 Spring提供了什么来停止任务吗?

  • 问题内容: 该程序在九次打印后完成: 如何停止进程(例如eclipse中的Java进程),因为它在9秒的时间限制后没有停止? 问题答案: 您遇到的问题是,取消哔声任务后,调度程序会保留活动线程。 如果存在活动的非守护程序线程,则JVM保持活动状态。 它使该线程保持不变的原因是您已在此行中告诉它这样做: 请注意以下文档: -即使在空闲状态下要保留在池中的线​​程数。 因此,您有两种可能的方法来导致J