我有以下代码:
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