一、简介

  • 定时调度的3中实现方式

    • 通过TimerTimetask类,我们可以实现定时启动某个线程。
    • 使用ScheduledThreadPoolExecutor
    • Quartz —— 一个开源框架,用作一个在预先确定(被纳入日程)的时间到达时,负责执行(或者通知)其他软件组件的系统。( refer to other articles )

      • quanz底层原理就是这里的内容。

二、类的介绍、实现方式

2.1 Timer、TimerTask类的介绍

  • TimerTimer类本身实现的就是一线程,只是该线程用来实现调用其它线程的。
  • TimerTaskTimerTask类是一个抽象类,该类实现了Runnable接口,所以该类具备多线程的能力。
  • 小案例:

    class myTask extends TimerTask{
       @Override
       public void run() {
           System.out.println("hello world");
       }
    }
    public class TimerDemo {
        public static void main(String[] args) {
           //创建定时器对象
           Timer timer = new Timer();
           //在3秒后执行MyTask类中的run方法,后面每10秒跑一次
           timer.schedule(new MyTask(), 3000, 10000);
        }
    }
    • 注意点:

      • 实际使用时,一个Timer可以启动任意多个TimerTask实现的线程,但是多个线程之间会存在阻塞
      • 如果多个线程之间需要完全独立的话,最好还是一个Timer启动一个TimerTask的实现。
  • 总结:有关原理 could refer to other articles

2.2、ScheduledThreadPoolExecutor

  • 一个任务调度线程池

    public class ScheduledThreadPoolExecutor extends ThreadPoolExecutor, 
       implements ScheduledExecutorService {
       //……
    }
    

wdt0x01
29 声望2 粉丝