我正在使用计时器类连续轮询我的数据库,之后将执行长操作,如果当前处理器未在指定的时间间隔内完成,scheduleAtFixedRate
将创建新的执行线程。
public void contextInitialized(ServletContextEvent sce) {
TreamisTransportSMS t = new TreamisTransportSMS();
t.transport();
Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTimerTask(), 1000, 1000);
System.gc();
}
答案 0 :(得分:0)
计时器文件说:
对应每个Timer对象的是单个后台线程 用于按顺序执行所有计时器的任务。计时器任务 应该快点完成。如果计时器任务需要过多的时间 完成后,它“占用”计时器的任务执行线程。这可以,在 转,延迟后续任务的执行,这可能会“束缚” 当(和如果)违规任务快速连续执行 终于完成了。
所以,不,只有一个执行线程
回应您关于创建自己的工作线程的补充问题。
您的MyTimerTask可以执行任何操作,包括启动新线程。然后,您必须管理该线程的内务管理,并且必须考虑您可能创建不断增加的线程数的可能性。我的猜测是Timer的设计者试图保护你免受这种升级。