java基础 定时器

news/2024/12/5 5:11:16/

方式一:Timer

TimerTask类实际上是实现了Runnable。

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

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

2、由于单线程特性,一旦其中的某个任务抛出异常使Timer线程死掉,其他任务都不能继续执行。

public Timer()    创建Timer定时器对象

public void schedule​(TimerTask task, long delay, long period)    开启一个定时器,按照计划处理TimerTask任务

// 1、创建Timer定时器
        Timer timer = new Timer();  // 定时器本身就是一个单线程。
        // 2、调用方法,处理定时任务
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "执行AAA~~~" + new Date());
//                try {
//                    Thread.sleep(5000);
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
            }
        }, 0, 2000);//0s后开始,每2s执行一次。

        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "执行BB~~~"+ new Date());
                System.out.println(10/0);//抛异常了这个线程就不再执行了。
            }
        }, 0, 2000);//这个线程会在上一个线程执行了第一次之后才执行,也就是睡了5s后才执行第一次。

        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "执行CCC~~~"+ new Date());
            }
        }, 0, 3000);

方式二: ScheduledExecutorService

内部是线程池,弥补了Timer的缺陷。

public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)    得到线程池对象
public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)    周期调度方法

// 1、创建ScheduledExecutorService线程池,做定时器
        ScheduledExecutorService pool = Executors.newScheduledThreadPool(3);

        // 2、开启定时任务
        pool.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "执行输出:AAA  ==》 " + new Date());
                try {
                    Thread.sleep(100000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }, 0, 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);
            }
        }, 0, 2, TimeUnit.SECONDS);


        pool.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "执行输出:CCC  ==》 " + new Date());
            }
        }, 0, 2, TimeUnit.SECONDS);


http://www.ppmy.cn/news/9695.html

相关文章

(02)Cartographer源码无死角解析-(46) 2D栅格地图→CastRay()函数与贝汉明(Bresenham)算法

讲解关于slam一系列文章汇总链接:史上最全slam从零开始&#xff0c;针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解&#xff1a;https://blog.csdn.net/weixin_43013761/article/details/127350885 文末…

分享136个PHP源码,总有一款适合您

PHP源码 分享136个PHP源码&#xff0c;总有一款适合您 136个PHP源码下载链接&#xff1a;https://pan.baidu.com/s/1A5sR357dh_SlS7pu33lW1Q?pwdkzgn 提取码&#xff1a;kzgn import os# 查找指定文件夹下所有相同名称的文件 def search_file(dirPath, fileName):dirs os…

hevc/h264 预测编码的原理

预测编码预测编码是视频编码中的核心技术之一&#xff0c;对于视频信号来说&#xff0c;一副图像内临近的像素之间有着比较强的相关性&#xff0c;相邻图像之间也有很强的时间相关性。因此&#xff0c;先进的视频编码往往采用帧内预测和帧间预测的方式&#xff0c;使用图像内已…

[Linux_]make/Makefile

[Linux_]make/Makefile 心有所向&#xff0c;日复一日&#xff0c;必有精进专栏&#xff1a;《Linux_》作者&#xff1a;沂沐沐目录 [Linux]make/Makefile 前言 一、Mikefile 二、如何写Mikefile文件 三、原理 四、项目清理 报错&#xff1a;missing separator 前言 一个工…

Springboot Controller接口默认自动填充 业务实体参数值

前言 今天看有小伙伴求救&#xff1a; 我还是一贯如此&#xff0c; 有人不明白&#xff0c;没玩过HandlerMethodArgumentResolver 。 那么很可能不止他一个人&#xff0c; 那么我就有必要出手。 不多说&#xff0c;开搞。 正文 快速模拟出这个使用场景 &#xff1a; 假如有好多…

图像处理:二值掩膜影像去噪与边缘强化

前言这篇博客主要解决的一个问题是掩膜图像的噪声去除和边缘强化&#xff0c;如下图1所示。可以看到掩膜图像上有很多的斑点噪声&#xff0c;而且掩膜的轮廓也不够清晰。所以我们的目标就是一方面尽可能把这些斑点噪声去除&#xff0c;另一方面尽量突出掩膜边界。另外处理后的掩…

关于全局变量的定义

全局变量&#xff0c;在A.c文件中定义的变量&#xff0c;在A.h中用extern声明一下即为全局变量&#xff0c;B.c文件想要调用的话只需要&#xff0c;包含A.h即可使用如果不想让其他.c文件引用本文件中的变量&#xff0c;加上static即可。include相当于把include .h文件直接带入到…

访问数据库超时问题排障

1 排障过程 系统从圣诞节那天晚上开始&#xff0c;每天晚上固定十点多到十一点多这个时段&#xff0c;大概瘫痪1h左右&#xff0c;过这时段系统自动恢复。系统瘫痪时的现象就是&#xff0c;网页和App都打不开&#xff0c;请求超时。系统架构&#xff1a; 整个系统托管在公有云…