【彩票资讯站源码】【牛牛 源码 6603】【cost 源码 筹码】定时发送源码_定时发送源码怎么设置

2024-11-27 23:45:17 来源:在线查看linux源码 分类:娱乐

1.如何实现定时任务- Java Timer/TimerTask 源码解析
2.java中的定时定任务调度之Timer定时器(案例和源码分析)

定时发送源码_定时发送源码怎么设置

如何实现定时任务- Java Timer/TimerTask 源码解析

       日常实现各种服务端系统时,我们一定会有一些定时任务的发送发送需求。比如会议提前半小时自动提醒,源码源码异步任务定时/周期执行等。设置那么如何去实现这样的定时定一个定时任务系统呢? Java JDK提供的Timer类就是一个很好的工具,通过简单的发送发送彩票资讯站源码API调用,我们就可以实现定时任务。源码源码

       现在就来看一下java.util.Timer是设置如何实现这样的定时功能的。

       首先,定时定我们来看一下一个使用demo

       基本的发送发送使用方法:

       加入任务的API如下:

       可以看到API方法内部都是调用sched方法,其中time参数下一次任务执行时间点,源码源码是设置通过计算得到。period参数为0的定时定牛牛 源码 6603话则表示为一次性任务。

       那么我们来看一下Timer内部是发送发送如何实现调度的。

       内部结构

       先看一下Timer的源码源码组成部分:

       Timer有3个重要的模块,分别是 TimerTask, TaskQueue, TimerThread

       那么,在加入任务之后,整个Timer是怎么样运行的呢?可以看下面的示意图:

       图中所示是简化的逻辑,多个任务加入到TaskQueue中,会自动排序,队首任务一定是当前执行时间最早的任务。TimerThread会有一个一直执行的循环,从TaskQueue取队首任务,判断当前时间是否已经到了任务执行时间点,如果是cost 源码 筹码则执行任务。

       工作线程

       流程中加了一些锁,用来避免同时加入TimerTask的并发问题。可以看到sched方法的逻辑比较简单,task赋值之后入队,队列会自动按照nextExecutionTime排序(升序,排序的实现原理后面会提到)。

       从mainLoop的源码中可以看出,基本的流程如下所示

       当发现是周期任务时,会计算下一次任务执行的时间,这个时候有两种计算方式,即前面API中的

       优先队列

       当从队列中移除任务,或者是plotval 函数源码修改任务执行时间之后,队列会自动排序。始终保持执行时间最早的任务在队首。 那么这是如何实现的呢?

       看一下TaskQueue的源码就清楚了

       可以看到其实TaskQueue内部就是基于数组实现了一个最小堆 (balanced binary heap), 堆中元素根据 执行时间nextExecutionTime排序,执行时间最早的任务始终会排在堆顶。这样工作线程每次检查的任务就是当前最早需要执行的任务。堆的初始大小为,有简单的倍增扩容机制。

       TimerTask 任务有四种状态:

       Timer 还提供了cancel和purge方法

       常见应用

       Java的Timer广泛被用于实现异步任务系统,在一些开源项目中也很常见, 例如消息队列RocketMQ的 延时消息/消费重试 中的异步逻辑。

       上面这段代码是RocketMQ的延时消息投递任务 ScheduleMessageService 的核心逻辑,就是flex源码分析使用了Timer实现的异步定时任务。

       不管是实现简单的异步逻辑,还是构建复杂的任务系统,Java的Timer确实是一个方便实用,而且又稳定的工具类。从Timer的实现原理,我们也可以窥见定时系统的一个基础实现:线程循环 + 优先队列。这对于我们自己去设计相关的系统,也会有一定的启发。

java中的任务调度之Timer定时器(案例和源码分析)

       定时器在日常生活中如同闹钟般常见,用于在特定时间执行任务或重复执行同一任务。在Java中,内置的定时任务器 Timer 是实现此功能的强大工具。本文将深入探讨 Timer 的基本使用、源码分析及其局限性。

       一、Timer 基本使用

       在 Java 中,通过 Timer 实现定时任务时,主要涉及到 Timer 和 TimerTask 这两个类。Timer 负责管理任务的执行,而 TimerTask 则包含具体任务的实现。使用步骤如下:

       1. 创建 Timer。

       2. 创建 TimerTask 并实现业务逻辑。

       3. 使用 Timer 的 schedule 方法执行 TimerTask,可以指定开始执行时间、间隔时间等参数。

       例如,创建一个在 2 秒后执行、每隔 1 秒执行一次的 TimerTask:

       java

       Timer timer = new Timer();

       TimerTask myTask = new MyTask();

       timer.schedule(myTask, L, L);

       二、Timer 源码分析

       深入剖析 Timer 的源码有助于理解其内部机制。Timer 类内部包含 TaskQueue 和 TimerThread 两个关键组件。

       1. **TaskQueue**:这是一个最小堆,存放 Timer 的所有 TimerTask。根据每个 TimerTask 的 nextExecutionTime(下次执行开始时间)决定其在堆中的位置。nextExecutionTime 越小,任务越有可能先执行。

       2. **TimerThread**:执行 TaskQueue 中的任务后,将任务从队列中移除。

       TimerTask 的位置决定于其 nextExecutionTime,确保优先执行执行时间最早的任务。此外,Timer 默认大小为 个任务。

       构造方法包括默认构造、是否为守护线程、带名字的构造、带名字和是否为守护线程的构造。

       定时任务方法包括:

       1. schedule(task, time):在时间等于或超过 time 时执行 task 且仅执行一次。

       2. schedule(task, time, period):首次在 time 时执行 task,之后每隔 period 毫秒重复执行。

       3. schedule(task, delay):在 delay 时间后执行 task 且仅执行一次。

       4. schedule(task, delay, period):在 delay 后开始首次执行 task,之后每隔 period 毫秒重复执行。

       执行定时任务的核心在于队列的维护和优先级调度。此外,还存在 scheduleAtFixedRate 方法,其行为与 scheduleAtFixedRate 类似,但考虑了任务执行所需时间的并发性。

       三、Timer 缺陷

       尽管 Timer 提供了基本的定时任务功能,但存在一些局限性:

       1. **线程管理不足**:当多个任务执行时间过长,且时间间隔不一致时,可能会导致任务执行顺序与预期不符,影响任务调度效率。

       2. **异常处理机制**:当 TimerTask 抛出 RuntimeException,所有任务都会停止执行,缺乏异常恢复机制。

       为了克服这些缺陷,出现了更高级的 Timer 替代品 ScheduledExecutorService,以及众多优秀的框架,提供更强大的任务管理和执行能力。未来文章中将详细介绍这些工具及其优势。

更多资讯请点击:娱乐

热门资讯

fasterxml源码分析

2024-11-27 23:162147人浏览

lb oa源码

2024-11-27 22:022829人浏览

2027年女足世界盃申辦程序開啟

2024-11-27 21:07302人浏览

推荐资讯

手表模板源码_手表模板源码是什么

1.小天才代码是什么意思?2.小天才手表如何输入代码?3.源代码男主角的手表4.小天才手表代码是什么意思啊?小天才代码是什么意思? 1. 小天才代码是一种特殊的符号组合,通过输入这些符号,服务商会

美國矽谷銀行風險官員職位空缺長達8個月 前任攜款離職

據《每日郵報》3月20日報道,美國矽谷銀行發生倒閉前數個月,該銀行的首席風險官無故離職,並帶走了超過715萬美元。該職位空缺長達8個月。美國證券交易委員會的一份文件顯示,矽谷銀行前首席風險官勞拉&mi

四川四地市场监管部门联合发布春节消费提示

中国消费者报成都讯记者刘铭)春节临近,餐饮、购物、旅游等行业迎来消费高峰,商家各类促销手段繁多,为让广大消费者度过一个欢乐祥和的佳节,针对春节期间消费特点和热点,四川省成都市市场监管局、德阳市市场监管