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

从在ScheduledExecutorService中运行的任务本身中停止定期任务

宰父跃
2023-03-14
问题内容

在ScheduledExecutorService中运行时,是否有种不错的方法可以阻止任务内部重复任务?

可以说,我有以下任务:

Future<?> f = scheduledExecutor.scheduleAtFixedRate(new Runnable() {
    int count = 0;
    public void run() {
       System.out.println(count++);
       if (count == 10) {
           // ??? cancel self
       }
    }
}, 1, 1, TimeUnit.SECONDS);

从外部,很容易通过f.cancel()取消,但是如何在指定的位置停止重复?(通过AtomicReference传递Future是不安全的,因为当scheduleAtFixedRate返回f
late并且变量也被延迟设置时,存在一个潜在的窗口,并且任务本身可能已经运行,在引用中看到空值。)


问题答案:

当重复任务抛出异常或错误时,它将被放置在Future中,并且该任务不会再次重复。您可以选择抛出RuntimeException或Error。



 类似资料:
  • 问题内容: 在ScheduledExecutorService中运行时,是否有种不错的方法可以阻止任务内部重复任务? 可以说,我有以下任务: 从外部,很容易通过f.cancel()取消,但是如何在指定的位置停止重复?(通过AtomicReference传递Future是不安全的,因为当scheduleAtFixedRate返回f较晚并且变量也设置得较晚时,存在一个潜在的窗口,并且任务本身可能已经运

  • 问题内容: 我有一个时间周期性地与一些不同的任务; 我也有Runnable与此计划程序一起使用的不同之处。当我想从调度程序中删除任务之一时,问题就开始了。 有没有办法做到这一点? 我可以使用一个调度程序完成不同的任务吗?实现此目的的最佳方法是什么? 问题答案: 只需取消以下项返回的未来: 要注意的另一件事是,取消不会从计划程序中删除任务。它所确保的是isDone方法总是返回true。如果继续添加此

  • 问题内容: 因此,使用此链接作为参考,任何人都可以提出更优雅的解决方案来取消定期的ScheduledExecutorService任务吗? 这是我目前正在做的事的一个例子: 问题答案: 我建议您使用int并自己安排任务。

  • 当我把逻辑放在一个可运行的线程中时,它工作得很好,只是我不能与UI线程交互。所以我试图把所有的东西都放在一个类中,这个类扩展了Task,除了Task只执行一次之外,其他的都可以工作。没有错误,我从Task successed方法获得一条successed消息。 我还尝试在call方法中使task return Boolean为true,但这没有帮助。 请注意,此代码实际上存在于控制器中,但我将其放

  • 我的 Windows 机器上运行了一个 docker 容器,它是使用官方文档中提供的 docker-compose 文件的改编版本构建的。 这工作得很好,但是我想将python脚本(我的任务)从已挂载的文件夹中移动到它们自己的docker容器中。 为了测试这一点,我创建了一个简单的“Hello World!”示例-脚本: 它与以下简单的docker文件一起 我可以用< code > docker