定时器
一、概述
1、定时器
定时器:是一种控制任务延时调用,或者周期调用的技术
作用:闹钟、定时邮件发送
2、定时器的实现方式
方式一:Timer
3、实现步骤
(1)创建一个定时器对象
(2)调用schedule方法,处理定时任务
(3)定时任务可以直接使用匿名内部类或者创建一个定时任务类继承TimerTask类
代码实现案例:
package org.example.timer;
import java.util.Timer;
import java.util.TimerTask;
public class Timer001 {
/**
* 目标:使用和了解定时器:Timer对象
* @param args
*/
public static void main(String[] args) {
// 1、创建一个定时器
Timer timer=new Timer();
// 2、方式一:调用方法,处理定时任务(:使用匿名内部类创建定时任务)
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("定时任务1——正在执行中!!!");
}
},3000,2000);
// 3、方式二:调用方法,处理定时任务(调用定时任务类)
timer.schedule(new myTimerTask02(),2000,3000);
}
}
class myTimerTask02 extends TimerTask {//TimerTask定时任务为一个抽象类
/**
* 创建一个定时任务类2
*/
@Override
public void run() {
System.out.println("定时任务2——正在执行中!!!");
}
}
方式二:ScheduledExecutorService
ScheduledExecutorService的优点:
(1)基于线程池,某个任务的执行情况不会影响其他定时任务的执行(即:若是又任务出现异常报错情况,该任务会被中止,但不会 影响其他任务的执行)。
package org.example.timer;
import java.util.Date;
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledExecutorService002 {
public static void main(String[] args) {
// 1、创建一个定时器线程池对象
ScheduledExecutorService pool= Executors.newScheduledThreadPool(1);//corePoolSize:表示线程的线程数量
// 2、调用定时器对象方法,执行任务(这里的任务使用匿名内部类创建)。
pool.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"-AAA-正在执行-"+ new Date());
}
},2,2, TimeUnit.SECONDS);
pool.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"-BBB-正在执行-"+ new Date());
System.out.println(10/0);//该语句:使程序报错产生异常,用于测试BBB任务会不会对其他任务的执行产生影响
}
},2,2, TimeUnit.SECONDS);
}
}