JavaEE->多线程:定时器

定时器

约定一个时间,时间到了,执行某个代码逻辑(进行网络通信时常见)

客户端给服务器发送请求 之后就需要等待 服务器的响应,客户端不可能无限的等,需要一个最大的期限。这里"等待的最大时间"可以用定时器的方式实现。

标准库中有现成的定时器实现:

主线程执行schedule方法的时候,就是把这个任务放到timer对象中。

timer里面本身也含一个线程------>"扫描线程"

时间到了,扫描线程就会执行刚才安排的任务

执行完任务之后,进程并未结束,timer内部的线程阻止了进程的结束。

timer里面也可安排多个任务

java 复制代码
public class Demo28 {
    public static void main(String[] args) {
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            public void run() {
                System.out.println("执行第四个任务");
            }
        },4000);
        timer.schedule(new TimerTask() {
            public void run() {
                System.out.println("执行第三个任务");
            }
        },3000);
        timer.schedule(new TimerTask() {
            public void run() {
                System.out.println("执行第二个任务");
            }
        },2000);
        timer.schedule(new TimerTask() {
            public void run() {
                System.out.println("执行第一个任务");
            }
        },1000);
        System.out.println("程序启动!");
    }
}

阻止结束,但是我们可以加timer自带的cancel()方法来结束线程

自己实现一个定时器

1.Timer里面需要有一个线程,扫描任务是否到时间

2.需要有一个数据结构来保存所有的任务

3.需要创建一个类,通过类的对象来描述一个任务。(至少包括任务的内容和时间)

由于任务都带有一个时间的先后顺序,所以我们采用优先级队列的数据结构来实现。

MyTimerTask

MyTimer

线程安全

main

相关推荐
萧瑟余晖4 小时前
Java深入解析篇三十六之分布式系统详解
java·开发语言·分布式
KaKa_大王4 小时前
关于秒杀项目的一些理解
java·学习
ZJU_统一阿萨姆4 小时前
【推理优化进阶】调度器的数学内核:排队论、SLO 与在线决策
开发语言·人工智能·语言模型·系统架构·vllm
tomla4 小时前
使用Java VisualVM观察过期对象引用现象
java
M1A14 小时前
Spring Boot YAML 配置读取完全指南:从基础到微服务
java
古法安卓5 小时前
Android-SELinux 策略调试实战:从 AVC 日志到策略修复
android·java·android studio
todoitbo5 小时前
飞算JavaAI的多租户权限隔离实测
java·springboot·ai编程·java开发·飞算javaai·java代码生成
星空5 小时前
Springboot复习
java·spring boot·spring
SomeB1oody5 小时前
【RustyML入门】5.2. 分类指标
开发语言·后端·机器学习·rust·教程
Dicky-_-zhang5 小时前
大模型部署架构:从推理引擎到弹性扩缩容的工程实践
java·jvm