Timer 简单介绍:
- 一种工具,线程用其安排以后,在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。
2.Timer 是单一线程来执行所有任务,此种方式的不足之处为当某个任务执行时间较长,以致于超过了TaskQueue中下一个任务开始执行的时间,会影响整个任务执行的实时性。为了提高实时性,可以采用多个消费者一起消费来提高处理效率,避免此类问题的实现。
3.在所有需要执行的任务全部提交,并且全部任务执行完毕,线程会被gc,但是这可能会反复长时间执行。由于默认执行线程不是守护线程,它有可能阻止应用程序终止。如果想取消此计时器任务,调用cancel()方法:
4.如果线程意外中止,比如调用了stop()方法,企图执行的定时任务会发生IllegalStateException,类似cancel()方法被调用。
5.Timer 是线程安全的,多线程可以共享一个Timer 而不需要额外的锁。
6.Timer 没有提供真实时间保证,它的时间安排是依靠Object.wait(long)方法。
7.Java1.5以后,建议用ScheduledThreadPoolExecutor来代替Timer ,更加强大。
其基本处理模型是单线程调度的任务队列模型,Timer不停地接受调度任务,所有任务接受Timer调度后加入
TaskQueue,TimerThread不停地去TaskQueue中取任务来执行.
简单demo
public static void main(String[] args) {
final Timer timer=new Timer();
timer.schedule(new TimerTask() {
Integer i=1;
@Override
public void run() {
System.out.println("timertask测试。。。"+i++);
if(i==10){
timer.cancel();
}
}
},0,1000);
}
public class Task extends TimerTask{
@Override
public void run() {
System.out.println("task1111111..");
}
}
public static void main(String[] args) throws IOException, InterruptedException {
final Timer timer=new Timer();
timer.schedule(new Task(),5,1000); //5:任务执行前等待时间 1000:连续执行任务的时间周期
timer.schedule(new Task2(),5,10);//不足:当task1任务执行时间较长,会影响task2任务的执行。
System.in.read();
}