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

相关推荐
爱笑的眼睛111 分钟前
超越 `cross_val_score`:深度解析Scikit-learn交叉验证API的架构、技巧与陷阱
java·人工智能·python·ai
六bring个六20 分钟前
文件压缩处理(一)
开发语言·c#
Chrikk42 分钟前
现代化 C++ 工程构建:CMake 与包管理器的依赖治理
开发语言·c++
❀͜͡傀儡师1 小时前
SpringBoot 扫码登录全流程:UUID 生成、状态轮询、授权回调详解
java·spring boot·后端
a努力。1 小时前
国家电网Java面试被问:Spring Boot Starter 制作原理
java·spring boot·面试
一 乐1 小时前
酒店预约|基于springboot + vue酒店预约系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
世转神风-2 小时前
qt-kits-警告:No C++ compiler,无法正常解析工程项目.pro文件
开发语言·c++
翔云 OCR API2 小时前
承兑汇票识别接口技术解析与应用实践
开发语言·人工智能·python·计算机视觉·ocr
元周民2 小时前
matlab求两个具有共根的多项式的所有共根(未详细验证)
开发语言·matlab