TimerTask,Timer,ExecutorService

TimerTask用法类似于Thread,重写其run()方法,中断用timerTask.cancel()。

Timer是一个线程,可以往里添加TimerTask,timer.scheduleAtFixedRate(timerTask,延迟执行时间,循环周期时间),中断用timer.cancel(),以timer的线程来执行该执行的timerTask的任务。

若timer中的timerTask较多,timerTask的处理时间超过循环周期,那么就会打乱timer时间的准确性,需要引入线程池。

引入线程池后,timer只负责把该执行的timerTask交给线程池中产生的线程来执行,自身不用再执行timerTask中的事务。就能保证timer的稳定。

大小不固定的线程池的获取:
ExecutorService pool=Executors.newCachedThreadPool(new ThreadFactory() {
  @Override
  public Thread newThread(Runnable r) {
    return new Thread(r);
  }

});

将timer中的timerTask交给线程池处理:
class MyTimerTast extends TimerTask{
      ExecutorService pool;
      public MyTimerTask(pool){
            this.pool=pool;
      }
      public void run(){
            pool.execute(new Runnable(){
                  public void run(){
                       原本timerTask中需要做的事情
              }
            });
      }
}

原文地址:https://www.cnblogs.com/cz305679760/p/4536413.html