定时器

一、概述

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);
    }
}
posted on 2023-01-09 13:38  吃饱饱没烦恼  阅读(347)  评论(0编辑  收藏  举报