Timer学习

Timer 简单介绍:

  1. 一种工具,线程用其安排以后,在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。

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();
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值