乐趣区

Jakartase多线程-任务定时调度-附

一、简介

  • 定时调度的 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 {//……}
    
退出移动版