より良い方法があるかもしれませんが、タスク自体を再スケジュールすることができます。そうすれば、前の実行が終了してから常に 1 分後に 1 つの実行が実行されます。
final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
Runnable yourTask = new Runnable() {
@Override
public void run() {
//do your stuff
scheduler.schedule(this, 1, TimeUnit.MINUTES);
}
};
scheduler.schedule(yourTask, 1, TimeUnit.MINUTES);
編集
タスクを正確に hh:mm:00 (正確な分) に実行する場合は、コードを次のように置き換えることができます。
long millisToNextMinute = 60000 - System.currentTimeMillis() % 60000;
scheduler.schedule(this, millisToNextMinute, TimeUnit.MILLISECONDS);