Tenho uma task que roda a cada 1 segundo, quero mandar uma mensagem a cada 10 segundos com precisão, se por acaso a task não rodar em 1 segundo. Esse loop é apenas para testar.
long timeStart = System.currentTimeMillis();
long timeEnd = timeStart + (45 * 1000);
long secondsWarn = (10 * 1000);
while (true) {
long currentTime = System.currentTimeMillis();
if (currentTime == timeEnd) {
return;
}
if (canWarn(timeStart, currentTime, timeEnd, secondsWarn)) {
//MESSAGE FOR CONSOLE
System.out.println("Seconds remaing " + timerFormatter(timeEnd - currentTime));
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(Hugosilvatestes.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public static boolean canWarn(long timeStart, long currentTime, long timeEnd, long secondsToWarn) {
long maxWarns = (timeEnd - timeStart) / secondsToWarn;
long remaingWarns = (timeEnd - currentTime) / secondsToWarn;
long sentWarns = maxWarns - remaingWarns;
long prediction = timeStart + (sentWarns * secondsToWarn);
return (prediction == currentTime) || prediction + (999) == currentTime || prediction - 999 == currentTime;
}