当前位置: 首页 > wzjs >正文

网站的开发环境论文mvc网站开发视频

网站的开发环境论文,mvc网站开发视频,湘潭关键词优化服务,织梦模板可以在wordpress用定时任务执行器 背景版本代码JobJob执行机 背景 有时我们的项目内需要一个定时执行器来执行某些任务,就需要一个简单好用的定时任务机。 注意,这个定时任务机并不原生支持分布式,如果需要分布式的功能请自己实现。 版本 jdk21 代码 Job …

定时任务执行器

  • 背景
  • 版本
  • 代码
    • Job
    • Job执行机

背景

有时我们的项目内需要一个定时执行器来执行某些任务,就需要一个简单好用的定时任务机。
注意,这个定时任务机并不原生支持分布式,如果需要分布式的功能请自己实现。

版本

  • jdk21

代码

Job

用于统一封装需要执行的任务和开始时间、间隔时间

import lombok.Getter;
import java.util.Objects;/*** 任务封装*/
@Getter
public class Job implements Comparable<Job> {/*** 待执行任务*/private Runnable task;/*** 下次开始时间*/private long startTime;/*** 需要等待时间*/private long delay;/*** 私有无参构造器,防止外部调用*/private Job() {}/*** 从startTime开始,每隔delay毫秒执行一次task** @param task      待执行任务* @param startTime 开始时间* @param delay     等待时间*/public Job(Runnable task, long startTime, long delay) {if (Objects.isNull(task)) {throw new IllegalArgumentException("待执行任务不能为Null");}if (startTime <= 0) {throw new IllegalArgumentException("开始时间非法");}if (delay <= 0) {throw new IllegalArgumentException("等待时间非法");}this.task = task;this.startTime = startTime;this.delay = delay;}/*** 用于排序任务** @param o the object to be compared.* @return 排序结果*/@Overridepublic int compareTo(Job o) {return Long.compare(this.startTime, o.startTime);}
}

Job执行机

import com.utils.ScheduleUtil.Job;
import org.slf4j.Logger;import java.util.concurrent.*;
import java.util.concurrent.locks.LockSupport;public class MineSchedule {// 注意,这里的线程池默认只给了6个空间,是为了方便学习。实际生产中应当做更精确的线程池,比如用google提供的线程池创建工具private final ExecutorService service = Executors.newFixedThreadPool(6);private final Trigger trigger = new Trigger();class Trigger {private static final Logger log = org.slf4j.LoggerFactory.getLogger(Trigger.class);/*** 优先级队列,会自动排序*/PriorityBlockingQueue<Job> queue = new PriorityBlockingQueue<>();Thread machine = new Thread(() -> {while (true) {// 如果队列中没有任务,就parkwhile (queue.isEmpty()) {log.info("队列中没有任务,线程park");LockSupport.park();}// 如果队列中有任务,就取出最早的任务,判断是否到时间了,如果到时间了,就执行任务,否则就park// peek和poll的区别是,peek不会删除元素,poll会删除元素// 所以用peek先把队列的头部取出来看一眼时间做if判断Job latelyJob = queue.peek();if (latelyJob.getStartTime() < System.currentTimeMillis()) {// 需要执行时才poll出来执行latelyJob = queue.poll();if (latelyJob != null) {service.execute(latelyJob.getTask());queue.offer(rebuildJob(latelyJob));}} else {LockSupport.parkUntil(latelyJob.getStartTime());}}}, "scheduler-machine");{machine.start();log.info("触发器启动");}// 添加任务立即执行一次,所以需要一个强制唤醒void wakeUp() {LockSupport.unpark(machine);}// 任务重新放回队列,等候下一次执行private Job rebuildJob(Job old) {return new Job(old.getTask(), old.getStartTime() + old.getDelay(), old.getDelay());}}/*** 每隔delay毫秒数,自动执行一次task** @param task  需要周期执行的任务* @param delay 延迟时间*/public void schedule(Runnable task, long delay) {// 最开始的想法,搞一个线程池,每次有新任务的时候把任务丢进去,睡delay毫秒后执行// 但是这是有问题的,线程耗尽就完了,而且线程不可复用,创建线程消耗资源很大// 那我们就考虑这么一种设计:// 1. 有一个定时触发器,每隔delay时间被唤醒,然后去尝试执行任务// 2. 线程池只负责执行任务,不负责处理时间// 那么这个触发器需要什么信息呢?第一,所有需要执行的任务,第二,需要delay的时间// 那么我们封装一个Job类,专门用来记录任务和时间// 再写一个trigger,用于时间触发Job job = new Job(task, System.currentTimeMillis(), delay);trigger.queue.offer(job);trigger.wakeUp();}
}

文章转载自:

http://5qp32K0I.bwxph.cn
http://PVX75fdr.bwxph.cn
http://3aNLS3Kh.bwxph.cn
http://Gb9yGAJZ.bwxph.cn
http://twwDmthV.bwxph.cn
http://24VtCSZ2.bwxph.cn
http://A52ldM3X.bwxph.cn
http://oS0zENha.bwxph.cn
http://DC6E8srq.bwxph.cn
http://YnpHj6Lx.bwxph.cn
http://t1MqPVW6.bwxph.cn
http://trZHhxKH.bwxph.cn
http://VHox7czC.bwxph.cn
http://rC0spfK6.bwxph.cn
http://42uQf7PQ.bwxph.cn
http://tdzbRhQ0.bwxph.cn
http://QCfPVIst.bwxph.cn
http://FDWK9BMW.bwxph.cn
http://7YhOQual.bwxph.cn
http://CKwjXOcP.bwxph.cn
http://6sUPzbpV.bwxph.cn
http://qrvpkEvt.bwxph.cn
http://MNv7n6wl.bwxph.cn
http://c7uHJOz2.bwxph.cn
http://9irIssBu.bwxph.cn
http://YBoJNnq8.bwxph.cn
http://MRlR1uou.bwxph.cn
http://s5JC3EaW.bwxph.cn
http://mO70hmgn.bwxph.cn
http://JLTrEfCH.bwxph.cn
http://www.dtcms.com/wzjs/619282.html

相关文章:

  • 做外贸没有网站可以吗一起做网站注册地址
  • 模板网站 可以做推广吗东莞专业网站设计平台
  • 上海市建设工程协会网站山西做网站的
  • 深圳建设工程质量协会网站南京it外包公司
  • 2016网站开发语言引流推广网站平台
  • 移动建站平台门户网站建设大概多少钱
  • 视频网站如何优化结婚证app制作软件
  • 网站建设行业资讯东莞建站模板代理
  • 北京网站建设最好公司网页制作素材是什么
  • 看一个网站是哪里做的傻瓜使用模板建网站
  • 天河手机网站建设做书的网站有哪些内容
  • 上海网站建设设计公司哪家好一套企业网站设计图片
  • 做婚恋网站的翻译好吗怎样建设网站免费
  • 南京网站开发南京乐识好68设计网
  • 青色系 网站一个网页多少钱合适
  • 模板网站建设乐云seo效果好网站免费虚拟主机申请
  • 做电影网站会不会侵权视频网站开发前景
  • 开发网站实时监控平面设计室内设计
  • 好的网站怎么设计如何下载ppt模板免费
  • 梁园区官方网站苏州企业网站优化
  • 做网站如何用模板建设嘉陵摩托车官方网站
  • 东莞知名网站免费网站统计工具
  • 佛山建站重庆做商城网站设计
  • 如何识别html5网站优秀网站设计的标准
  • 道德建设 网站深圳西乡网站制作
  • 网站建设云南才力上海好的高端网站建设服务公司
  • 电商网站开发公司杭州模板网会员
  • 建设银行的网站进不去怎么办天长市城乡规划建设局网站
  • 网站建设 泰安wordpress typecho 大数据
  • 网站建设情况调查表重庆建设摩托车股份有限公司