图解定时任务线程池
线程池概念 我们上篇文章分析了ThreadPoolExecutor,如果要用一句话说明它的主要优势,就是线程置换。还有Executors工具类,极大的简化了研发人员工作。 我用一个图重复描述下线程池概念。多生产-多消费模型。 生产者将线程任务丢进线程池中,生产者就就结束了。 线程池控制消费者消费元素,消费者可以是1个或者多个,取决于线程池参数corePoolSize和maxPoolSize设置。 阻塞队列是用来装生产者丢进去的线程任务,如ArrayBlockingQueue,LinkedBlockingQueue,DelayedQueue等。如果生产者生产能力超过消费者消费能力,如果阻塞队列有长度限制并且超过队列长度线程池会执行饱和策略,如果队列没有长度限制,可也能出现OOM哦,因为线程任务可能把内存都撑爆了,这也是面试常考点哦! 详细概念可以翻看我上一篇文章《线程池面试必考问题》。 定时任务延时原理 还记得我们上面说的阻塞队列吗?定时任务线程池底层使用DelayedQueue实现的,这种延迟队列有一个最大的特点:按时出队列,大家都考过驾照吧,科目三考试的时候都是车上坐的是4个人,假设...