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

如何从ScheduledExecutorService中删除任务?

莫振
2023-03-14
问题内容

我有一个ScheduledExecutorService时间周期性地与一些不同的任务scheduleAtFixedRate(Runnable, INIT_DELAY, ACTION_DELAY, TimeUnit.SECONDS);

我也有Runnable与此计划程序一起使用的不同之处。当我想从调度程序中删除任务之一时,问题就开始了。

有没有办法做到这一点?

我可以使用一个调度程序完成不同的任务吗?实现此目的的最佳方法是什么?


问题答案:

只需取消以下项返回的未来scheduledAtFixedRate()

// Create the scheduler
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
// Create the task to execute
Runnable r = new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello");
    }
};
// Schedule the task such that it will be executed every second
ScheduledFuture<?> scheduledFuture =
    scheduledExecutorService.scheduleAtFixedRate(r, 1L, 1L, TimeUnit.SECONDS);
// Wait 5 seconds
Thread.sleep(5000L);
// Cancel the task
scheduledFuture.cancel(false);

要注意的另一件事是,取消不会从计划程序中删除任务。它所确保的是isDone方法总是返回true。如果继续添加此类任务,可能会导致内存泄漏。例如:如果您基于某个客户端活动或单击UI按钮来启动任务,请重复n次并退出。如果该按钮被单击了太多次,则可能会导致无法进行垃圾回收的线程池很大,因为调度程序仍具有引用。

您可能要在Java 7及更高版本中使用setRemoveOnCancelPolicy(true)ScheduledThreadPoolExecutor类中使用。为了向后兼容,默认设置为false。



 类似资料:
  • 注意:我没有看到我的原始JSON,也不知道包装器元素是谁或什么。

  • 背景:我正在使用TestNG DataProvider 要求:执行完成后需要从TestNG报告中删除1个测试。 我的解决方案:假设,我需要从报告中删除“XYZ”测试用例。

  • 问题内容: 如何编写一个从先前编译的JAR中删除文件的ant任务? 假设我的JAR文件为: …并且我想要一个没有包的JAR文件版本,我需要使用ant剥离它,以便最终得到一个包含以下内容的JAR: 谢谢! 问题答案: 您是否尝试过使用任务? 例如:

  • 问题内容: 在每行末尾添加\ n,结束程序正常工作,仅在最后一行工作… 请举个例子,我在任何解决方案中都尝试不了什么,而我发现这里不适合我。 问题答案: 您可以分割最后一个字符: 也许更好的方法是使用字符串库:

  • 问题内容: 如何从静态页面的网址中删除? 另外,我需要将任何网址重定向到没有该网址的网址。(即到)。 问题答案: 感谢您的答复。我已经解决了我的问题。假设我的页面在下,则适用以下.htaccess 规则。

  • 问题内容: 这是一种提交方法: 有可能做下面的事情吗? 我如何从中删除或修改值 问题答案: 除了将项目追加到FormData对象之外,您不能执行任何其他操作。参见规格。如果在实际构造对象之前使用词典/对象存储要添加/修改的所有值,那会更好。