== spring.task.scheduling.pool.size=4 == over 8 seconds, three @Scheduled methods on one application slow() fixedRate 2000 ms, sleeps 1800 ms : 5 executions fast() fixedRate 200 ms : 41 executions throwing() fixedRate 300 ms, always throws : 27 executions distinct scheduler threads : 4 [scheduling-1, scheduling-2, scheduling-3, scheduling-4] longest gap between two fast() executions : 200 ms (200 ms was the schedule) fast() executions that started within 20 ms of the previous one (the catch-up burst) : 0 throwing() kept its schedule after every failure. Spring wraps a scheduled method in TaskUtils.LOG_AND_SUPPRESS_ERROR_HANDLER, so each exception is logged by o.s.s.s.TaskUtils$LoggingErrorHandler as "Unexpected error occurred in scheduled task" and then discarded. A raw ScheduledExecutorService would have cancelled the task at the first one.