Tengo la clase después de lo cual comprueba una tabla de base de datos cada segundo para comprobar si hay filas. Si existe una fila fijaráincludeForceUpdate = true
si la tabla de base de datos no contiene ninguna fila, entonces quiero sendUpdate
a ser llamado cada 30 segundos desde la última vez que fue llamado.
Si en cualquier momento una nueva fila se convierte en disponible en la tabla a continuación sendUpdate
se llamará inmediatamente y los 30 segundos del temporizador se inicia desde el momento sendUpdate
me llamaron.
La tabla constantemente debe hacerse exámenes para detectar nuevas filas.
No puedo envolver mi mente alrededor de hacer esto. Por qué necesito utilizar más hilos?
En términos simples, quiero que el siguiente suceda
sendUpdate
debe ejecutar cada 30 segundos.
Sin embargo, si en cualquier momento hay una nueva fila en la base de datos a continuación, sendUpdate
debe ejecutar inmediatamente sin pasar por los 30 segundos esperan.
public class Updater implements Runnable {
private volatile boolean exit = false;
Database db = new Database();
@Override
public void run() {
while (!exit) {
Boolean includeForceUpdate = false;
try {
Long id = db.getUpdate(myAccountId);
if (id != null) {
db.deleteForceUpdate(id);
sleepTime = 1;
includeForceUpdate = true;
} else {
sleepTime = 30;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void sendUpdate(Boolean includeForceUpdate) throws Exception {
//my code here for sending update
}
public void stop() {
exit = true;
}
}
Terminé usando un cronómetro para la tarea
@Override
public void run() {
Database db = new Database();
Instant startTime = Instant.now();
while (!exit) {
try {
Long id = db.getUpdate(1105349L);
if (id != null) {
db.deleteUpdate(id);
}
Instant endTime = Instant.now();
Duration duration = Duration.between(startTime, endTime);
System.out.println(duration.getSeconds());
if (duration.getSeconds() >= 30 || id != null) {
System.out.println("CALLED!");
startTime = Instant.now();
}
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
}
}