首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取消匿名TimerTask

取消匿名TimerTask
EN

Stack Overflow用户
提问于 2015-01-04 02:43:05
回答 2查看 775关注 0票数 2
代码语言:javascript
复制
boolean timing = true; /* this is a global attribute and its only here for context */
Timer t = new Timer();
t.schedule(new TimerTask() {
        @Override
        public void run() {
            Platform.runLater(() -> {
                new Thread(() -> {
                    if (!timing) {
                        try {
                            tt.cancel(); /* I want to cancel this if timming is false*/
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    } else {
                        update();
                    }
                }).run();
            });
        }
}, 10, 10);

我想知道是否可以取消这个特定的TimerTask本身,请注意,"tt“只是一个例子,我不知道还能叫它什么。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-04 03:45:14

Timer有自己的后台线程。除非您的任务需要很长时间才能运行,否则不需要在任务的#run()方法中创建一个新线程(也不应该)。

可以通过使实例final取消对计时器的后续执行。

代码语言:javascript
复制
final Timer t = new Timer();
t.schedule(new TimerTask() {
    @Override
    public void run() {
        // Do work.
        if (!timing) {
            t.cancel();
        }
    }
});

(为简洁起见省略了异常处理。)

如果您只想取消任务本身(允许计时器调度的其他任务继续运行),则对任务实例的#取消()方法的调用很简单:

代码语言:javascript
复制
if (!timing) {
    this.cancel();
}

还应该确保timing变量被声明为volatile。如果不这样做,则可以在每个线程中缓存该值,并且您将无法观察更改。

票数 0
EN

Stack Overflow用户

发布于 2015-01-04 03:47:37

不如创建一个新的方法来取消Timer

代码语言:javascript
复制
private void cancelTimer(Timer t)
{
    t.cancel();
}

您还需要使Timer成为最终结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27761848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档