Можно использовать ScheduledThreadPoolExecutor вместо Timer
.
Использование довольно простое. Вы создаете экземпляр исполнителя:
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor( 1 );
А потом, когда вы хотите добавить задачу, вы звоните:
executor.scheduleAtFixedRate( myRunnable, delay, interval, unit );
Где myRunnable
- это ваша задача (которая реализует Runnable
-интерфейс), delay
- сколько времени до того, как задача должна быть выполнена в первый раз, interval
- время между выполнением задачи после первой выполнение. delay
и interval
измеряются на основе параметра unit
, который может быть TimeUnit. * (Где * - SECONDS, MINUTES, MILLISECONDS и т. Д.).
Затем, чтобы остановить выполнение, вы звоните:
executor.shutdownNow();
И затем вы можете повторно отправить задание с другим интервалом.
Примечание. Возможно, вам придется создать новый экземпляр исполнителя перед повторной отправкой задачи, но я не совсем уверен, почему.