Java-定时器(Timer定时器、ScheduledExecutorService定时器)

个人简介

  • 大家好,我是翰慧腾。一名正在努力学JAVA的大一小白,本文章为初学的笔记,希望各位多多指教。
  • 欢迎点赞+收藏+留言
  • 别慌,月亮也在大海某处迷茫

一、定时器概述

定时器是一种控制任务延时使用,或者周期调用的技术。eg:闹钟,定时邮件发送。

二、Timer定时器Java-定时器(Timer定时器、ScheduledExecutorService定时器)_第1张图片

import java.util.Timer;
import java.util.TimerTask;

/**
 * @author hanhan
 * date 2022/4/21 22:12
 * 努力已经来不及了,你得拼命
 */
public class TimerDemo_0 {
    public static void main(String[] args) {
        //创建Timer定时器对象
        Timer t = new Timer();//定时器本身就是一个单线程
        //TimerTask类实现了Runnable接口,所以需要重写run方法
        t.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+"执行了");
            }
        },3000,2000);//第二个参数是延时调度,第三个参数是周期调度
    }
}

 Timer定时器的特点和存在问题:

1.Timer是单线程,处理多个任务按照顺序执行,存在延时与设置定时器的时间有出入。

2.可能因为其中的某个任务的异常使Timer线程死掉,从而影响后续任务的执行。

三、ScheduledExecutorService定时器

Java-定时器(Timer定时器、ScheduledExecutorService定时器)_第2张图片

 

import java.util.Date;
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * @author hanhan
 * date 2022/4/23 17:11
 * 努力已经来不及了,你得拼命
 */
public class TimerDemo_1 {
    public static void main(String[] args) {
        //创建ScheduledExecutorService线程池,做定时器
        ScheduledExecutorService s = Executors.newScheduledThreadPool(3);
        //开启定时任务
        s.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+"执行输出A"+"---"+new Date());
            }
        },0,2, TimeUnit.SECONDS);//最后一个参数是单位秒
        s.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+"执行输出B"+"---"+new Date());
            }
        },0,2, TimeUnit.SECONDS);
    }
}

优点:基于线程池,某个任务的执行情况不会影响其他定时任务的执行。

你可能感兴趣的:(JAVA基础学习,java)