Ответ 1
Все три позволяют выполнять задачи на другом (например, не главном) потоке. Handler позволяет использовать сообщение, передающее шаблон Actor, для безопасного обмена информацией между потоком. Это не позволяет вам делать время/задержки/и т.д.
A ScheduledExecutorService - очень общее решение для управления потоками. Вы инициализируете его определенным числом для рабочих потоков, а затем даете ему рабочие единицы. Вы можете задержать/время и повторить рабочие единицы.
Класс Timer имеет простой API, который похож на ScheduledExecutorService для одноразового использования с одним потоком. Официальный API предлагает не использовать этот класс, а вместо этого использовать собственный ScheduledExecutor.