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中需要做的事情
}
});
}
}