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

相关推荐
_WndProc3 分钟前
【Python】Flask网页
开发语言·python·flask
深栈解码7 分钟前
JMM深度解析(三) volatile实现机制详解
java·后端
liujing1023292919 分钟前
Day04_刷题niuke20250703
java·开发语言·算法
wjcurry21 分钟前
多线程知识
多线程
Brookty22 分钟前
【MySQL】JDBC编程
java·数据库·后端·学习·mysql·jdbc
能工智人小辰36 分钟前
二刷 苍穹外卖day10(含bug修改)
java·开发语言
DKPT37 分钟前
Java设计模式之结构型模式(外观模式)介绍与说明
java·开发语言·笔记·学习·设计模式
缘来是庄39 分钟前
设计模式之外观模式
java·设计模式·外观模式
LL.。1 小时前
同步回调和异步回调
开发语言·前端·javascript
0wioiw01 小时前
Python基础(吃洋葱小游戏)
开发语言·python·pygame