当前执行未完成时,scheduleAtFixedRate是否调用不同的执行线程?

时间:2013-11-18 06:44:47

标签: java multithreading timer

我正在使用计时器类连续轮询我的数据库,之后将执行长操作,如果当前处理器未在指定的时间间隔内完成,scheduleAtFixedRate将创建新的执行线程。

public void contextInitialized(ServletContextEvent sce) {
        TreamisTransportSMS t = new TreamisTransportSMS();
        t.transport();
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new MyTimerTask(), 1000, 1000);
        System.gc();
    }

1 个答案:

答案 0 :(得分:0)

计时器文件说:

  对应每个Timer对象的

是单个后台线程   用于按顺序执行所有计时器的任务。计时器任务   应该快点完成。如果计时器任务需要过多的时间   完成后,它“占用”计时器的任务执行线程。这可以,在   转,延迟后续任务的执行,这可能会“束缚”   当(和如果)违规任务快速连续执行   终于完成了。

所以,不,只有一个执行线程

回应您关于创建自己的工作线程的补充问题。

您的MyTimerTask可以执行任何操作,包括启动新线程。然后,您必须管理该线程的内务管理,并且必须考虑您可能创建不断增加的线程数的可能性。我的猜测是Timer的设计者试图保护你免受这种升级。