Why prefer ScheduledThreadPoolExecutor for timed tasks?
How does ExecutorService improve resource management?