网站后台管理破解,口碑营销相关案例,wordpress静态页面找不到,wordpress demo 导入Java提供Timer和ScheduledThreadPoolExecutor两个类实现定时任务#xff0c;其中Timer简单易用#xff0c;但所有任务都是由同一个线程来调度#xff0c;任务串行执行#xff0c;任务之间存在互相干扰#xff0c;一是前一个任务的延迟会导致后面的任务延迟#xff0c;二是… Java提供Timer和ScheduledThreadPoolExecutor两个类实现定时任务其中Timer简单易用但所有任务都是由同一个线程来调度任务串行执行任务之间存在互相干扰一是前一个任务的延迟会导致后面的任务延迟二是前一个任务异常导致后面的任务不再执行三是Timer执行周期任务时依赖系统时间如果当前系统时间发生变化执行行为也会出现变化。 鉴于Timer的缺陷Java 5提供了ScheduledThreadPoolExecutor实现定时任务每个任务由线程池中一个线程去执行任务并发执行且相互之间不会受到干扰。此外ScheduledExecutorService是基于时间延迟不会由于系统时间的改变发生执行变化。但ScheduledThreadPoolExecutor要在某个时间点开始执行任务没有Timer方便需要先计算出和执行时间点的时间差然后设置第一次启动的延时。 综上对于复杂的调度最好是使用开源软件如Quartz。对于普通的周期性任务使用ScheduledThreadPoolExecutor就可以满足要求但使用ScheduledThreadPoolExecutor时必须注意两点 1. 一定要使用try{}catch(Throwable t){}捕获所有可能的异常因为ScheduledThreadPoolExecutor会在任务执行遇到异常时取消后续执行。 2. 注意scheduleAtFixedRate与scheduleWithFixedDelay的区别scheduleAtFixedRate是上一个任务开始执行之后延迟设定时间再执行是从上一个任务开始时计时但对于运行时长超过延迟时长的任务会等上一个任务执行完之后下一个任务才开始执行此时延时没有任何意义。而scheduleWithFixedDelay是在上一个任务结束执行之后延迟设定时间再执行是从上一个任务结束时开始计算。 转载于:https://blog.51cto.com/wangzhichao/1716660