当前位置: 首页 > 面试题库 >

ScheduledExecutorService,如何在不停止执行程序的情况下停止操作?

方建明
2023-03-14
问题内容

我有以下代码:

ScheduledExecutorService scheduledExecutor;
.....
ScheduledFuture<?> result = scheduledExecutor.scheduleWithFixedDelay(
    new SomethingDoer(),0, measurmentPeriodMillis, TimeUnit.MILLISECONDS);

在发生某些事件之后,我应该停止在的run()方法中声明的操作,该方法SomethingDoer实现Runnable

我怎样才能做到这一点?我无法关闭执行器,只能撤消我的定期任务。我可以用result.get()吗?如果可以的话,请告诉我它将如何工作。


问题答案:

使用result.cancel()。该ScheduledFuture是你的任务的处理。您需要取消此任务,它将不再执行。

实际上,cancel(boolean mayInterruptIfRunning)是签名,并将其与true参数一起使用将导致当前正在运行的执行线程被interrupt()调用中断。如果线程在阻塞的可中断调用(例如)中等待,则会抛出一个中断的异常Semaphore.acquire()。请记住,这cancel将确保仅在任务停止执行后不再执行该任务。



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

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

  • 我正在用laravel建立一个网站,我想调试我的程序,但很难使用dd(),因为它会立即停止程序,我想让它显示每执行一行,任何想法?任何帮助将不胜感激,谢谢。

  • 我通过创建固定数量的线程来使用执行器服务来进行HTTP GET数据检索。 当Tomcat停止时,我们会出现以下错误: 严重:web应用程序[/viewer]似乎已启动名为[ThreadExecutor_51616156]的线程,但未能停止该线程。这很可能会造成内存泄漏。 这是真的吗?在没有这些服务错误的情况下,如何正确停止tomcat。

  • 问题内容: 我在Docker容器上安装了Nginx,并且正在尝试像这样运行它: 问题在于Nginx的工作方式,即初始进程会立即产生一个主要的Nginx进程和一些工作程序,然后退出。由于Docker仅监视原始命令的PID,因此容器将暂停。 如何防止容器停止?我需要能够告诉它绑定到第一个子进程,或者阻止Nginx的初始进程退出。 问题答案: 像所有行为良好的程序一样,可以配置为不自我守护。 使用htt