Java多线程定时调度器(Timer、TimerTask)

通过定时调度器可以对线程进行定时开启,周期性地开启,基本步骤:

1、创建一个调度器            new   Timer();

2、准备任务。                继承TimerTask类,重写run方法.

3、确定规则,开始执行。        由Timer对象调用schedule(TimerTask子类对象,线程开始时间,运行周期)方法或者scheduleAtFixedRate方法

 

 

Timer

它是一个计时器,可以有计划的对线程进行调用。

常用方法:

难点是schedule  与  scheduleAtFixedRate的区别

移步:Timer中schedule方法和scheduleAtFixedRate方法的区别

TimerTask

是一个实现了Runnable接口的抽象类,代表一个可以被Timer执行的任务。

如何使用?继承TimerTask,重写run方法,通过Timer.schedule或者scheduleAtFixedRate进行定时的调用就行啦。

使用

1、准备计时器。               new   Timer();

2、准备任务。                继承TimerTask类,重写run方法.

3、确定规则,开始执行。        由Timer对象的schedule方法或者scheduleAtFixedRate方法

一般形式:

public class LeaningThread {
    public static void main(String[] args) {
        //程序运行时间
        Calendar cd = new GregorianCalendar(2099,13,14);
        //开启一个调度器,它开启的线程名为奥特曼线程
        Timer tm = new Timer("奥特曼线程");
        //第一个调度器开启了,它会在2099年在控制台输出一句话。
        tm.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("调度器一:现在你还在吗?");
            }
        },cd.getTime());
        //第二个调度器开始了,它会在2秒后在控制台循环输出一句话,间隔是2秒。
        tm.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+"调度器二:现在你还在吗?");
            }
        },2000,1000);
        try {
            //五秒后main线程中把调度器关闭
            Thread.sleep(5000);
            tm.cancel();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

运行结果:

posted @ 2022-11-13 11:24  在博客做笔记的路人甲  阅读(728)  评论(0编辑  收藏  举报