做网站前端程序员,两个网站 一个域名,硬件开发流程图,中学网站建设工作实施方案一、Timer解析
TaskQueue#xff1a;小顶堆#xff0c;存放timeTask。
TimerThread#xff1a;任务执行线程
死循环不断检查是否有任务需要开始执行#xff0c;有就执行它。始终是一个线程在执行。
单线程执行任务#xff0c;任务有可能相互阻塞#xff1a;
schedul…一、Timer解析
TaskQueue小顶堆存放timeTask。
TimerThread任务执行线程
死循环不断检查是否有任务需要开始执行有就执行它。始终是一个线程在执行。
单线程执行任务任务有可能相互阻塞
schedule任务执行超时会导致后面的任务往后推移预想在这个间隔内存在的任务执行就没有了。scheduleAtFixedRate任务超时可能导致下一个任务就会马上执行。
运行时异常会导致timer线程终止。
任务调度是基于绝对时间的对系统时间敏感。
二、定时任务线程池
ScheduledThreadPoolExecutor
使用多线程执行任务不会相互阻塞。如果线程失活会新建线程执行任务线程抛异常任务会被丢弃、需要做捕获处理。DelayedWorkQueue小顶堆无界队列 在定时线程池中最大线程数是没有意义的。执行时间距离当前时间越接近的任务在队列的前面。用于添加ScheduleFutureTask继承于FutureTask实现RunnableScheduledFuture接口提供异步执行能力并且可以返回执行结果。线程池中的线程从DelayQueue中获取ScheduleFutureTask, 然后执行。实现了Delayed接口可以通过getDelay方法来获取延迟时间。Leader - Follower模式避免没必要的唤醒和阻塞的操作这样会更加有效且节省资源。应用场景适用于多个后台线程执行周期任务同时为了满足资源管理的需求需要限制后台线程数。
SingleThreadScheduledExecutor
单线程的ScheduledThreadPoolExecutor应用场景适用于需要单个后台线程执行周期任务同时需要保证任务顺序执行。
三、时间轮算法