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

相关推荐
Ray Liang17 分钟前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
Java水解33 分钟前
Java 中间件:Dubbo 服务降级(Mock 机制)
java·后端
SimonKing5 小时前
OpenCode AI辅助编程,不一样的编程思路,不写一行代码
java·后端·程序员
FastBean5 小时前
Jackson View Extension Spring Boot Starter
java·后端
Seven976 小时前
剑指offer-79、最⻓不含重复字符的⼦字符串
java
皮皮林55115 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河16 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
桦说编程18 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
躺平大鹅20 小时前
Java面向对象入门(类与对象,新手秒懂)
java