我有一个下面的类,它每秒检查一次数据库表以检查行。如果存在一行,它将设置includeForceUpdate = true
如果数据库表不包含任何行,那么我希望sendUpdate
从上次被调用起每30秒被调用一次。
如果表中随时有新行可用,则sendUpdate
将立即被调用,并且从调用sendUpdate
的时间起30秒计时器开始。
应该不断检查表中是否有新行。
我不能全神贯注于此。我需要使用更多线程吗?
简单来说,我希望发生以下情况
sendUpdate
应该每30秒执行一次。
但是,如果数据库中随时有新行,那么sendUpdate
应该立即执行,而无需等待30秒。
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;
}
}
答案 0 :(得分:2)
我最终使用秒表完成了任务
@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();
}
}
}