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

相关推荐
We་ct5 分钟前
深度剖析浏览器跨域问题
开发语言·前端·浏览器·跨域·cors·同源·浏览器跨域
身如柳絮随风扬12 分钟前
多数据源切换实战:从业务场景到3种实现方案全解析
java·分布式·微服务
skywalk816313 分钟前
在考虑双轨制,即在中文语法的基础上,加上数学公式的支持,这样像很多计算将更加简单方便,就像现在的小学数学课本里面一样,比如:定x=2*x + 1
开发语言
小书房17 分钟前
Kotlin的by
android·开发语言·kotlin·委托·by
就叫飞六吧33 分钟前
QT写一个桌面程序exe并动态打包基本流程(c++)
开发语言·c++
threelab42 分钟前
Three.js 代码云效果 | 三维可视化 / AI 提示词
开发语言·javascript·人工智能
Java小生不才43 分钟前
Spring AI文生音
java·人工智能·spring
凯尔萨厮1 小时前
Springboot2.x+Thymeleaf项目创建
java
V搜xhliang02461 小时前
OpenClaw科研全场景用法:从文献到实验室的完整自动化方案
运维·开发语言·人工智能·python·算法·microsoft·自动化
kaikaile19951 小时前
风、浪、流环境模型的船舶三自由度(纵荡、横荡、艏摇)运动仿真MATLAB
开发语言·人工智能·matlab