获得徽章 0
- Java 延时任务
通俗地讲,一个定时器就搞定。但实际来说要考虑的问题很多,例如线程安全、并发之类的。
# 时间轮算法实现
1996 年 George Varghese 和 Tony Lauck 的论文《Hashed and Hierarchical Timing Wheels: Data Structures for the Efficient Implementation of a Timer Facility》中提出了一种时间轮管理 Timeout 事件的方式。其设计非常巧妙,并且类似时钟的运行,如下图的原始时间轮有 8 个格子,假定指针经过每个格子花费时间是 1 个时间单位,当前指针指向 0,一个 17 个时间单位后超时的任务则需要运转 2 圈再通过一个格子后被执行,放在相同格子的任务会形成一个链表。
相比 DelayQueue 的数据结构,时间轮在算法复杂度上有一定优势,但用时间轮来实现延时任务同样避免不了单点故障。
# 参考
- [如何实现延迟任务,这11种方式才算优雅!](www.cnblogs.com)
- [JAVA中延时任务的几种实现方式 ](ost.51cto.com)
- [延迟任务的实现总结](www.cnblogs.com)
- [Java延时订单处理(上)- - 抛砖引玉](blog.csdn.net) DelayQueue,参考了这个
- [基于Redis实现DelayQueue延迟队列设计方案(附源码)](blog.csdn.net)
展开评论1 - 当前 SqlMan 使用的 Spring 自带的表达式引擎 SpEl,功能各方面都不错,就是有个依赖的包袱:单纯看 SpEl 的模块 spring-expression 的话,大小是1.3MB左右。但是其还依赖了 spring-core 和 spring-jcl,再含这两个的话,大小 7.4MB左右。作为一个本身精巧的数据库工具却依赖那么大的家伙,好像有点说不过去。于是我考虑别的表达式引擎,也没啥轻量级的,连最熟悉的老朋友 JUEL(JSP 时代的表达式)都600kb~
juel.sourceforge.net
github.com 没办法,自己写吗?曾经写过 JSON 解析器,这难度应该不比 JSON 的大,只是比较耗费时间和脑力……(不错的选项文章:《Java表达式引擎选型调研分析》
developer.jdcloud.com)
展开评论1 - 无法登录暗黑破坏神4游戏,提示网络错误
ping 美服 us .actual .battle .net,得到IP地址;编辑host文件,在最后一行添加IP+prod. actual .battle .net后保存。就能正常运行了评论1 - Win10资源管理器不显示 H265 视频的缩略图,解决方法:下载 K-lite Codec Standard 即可
www.codecguide.com。苹果 HEIF 照片不显示:下载
copytrans.studio
评论1
![[擦汗]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_38.2d77d3e.png)