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(); } } }
运行结果: