系列文章目录和关于我 一丶前言 之前在学习netty源码的时候,经常看netty hash时间轮(HashedWheelTimer)的出现,时间轮作为一种定时调度机制,在jdk中还存在Timer和ScheduledThreadPoolExecutor。那么为什么netty要重复造轮子昵,HashedWheelTimer又是如何实现的,解决了什么问题? 这一篇将从Timer-->ScheduledThreadPoolExecutor-->HashedWheelTimer 依次进行讲解,学习其中优秀的设计。 二丶Timer Timer 始于java 1.3,原理和内部结构也相对简单, 如上图所示,Timer内部存在一个线程(TimerThread实例)和一个数组实现的堆 TimerThread运行时会不断从数组中拿deadline最早的任务,进行执行。为了更快的拿到dealline最早的任务,Timer使用数组构建了一个堆,堆排序的依据便是任务的执行时间。 Timer中只存在一个线程TimerThread来执行定时任务,因此如果一个任务耗时太长会延后其他任务的执行...