gpt4 book ai didi

java - 每 30 秒调用一次方法,除非表中存在一行

转载 作者:搜寻专家 更新时间:2023-11-01 03:15:41 25 4
gpt4 key购买 nike

我有以下类,它每秒检查一次数据库表以检查行。如果一行存在,它将设置 includeForceUpdate = true

如果数据库表不包含任何行,那么我希望 sendUpdate 从上次调用后每 30 秒调用一次。

如果表中有新行可用,则 sendUpdate 将立即被调用,30 秒计时器从 sendUpdate 被调用时开始计时。

应不断检查表中是否有新行。

我无法全神贯注地做这件事。我需要使用更多线程吗?

简单来说,我希望发生以下情况

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;
}
}

最佳答案

我最终使用了秒表来完成这项任务

@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();
}
}

}

关于java - 每 30 秒调用一次方法,除非表中存在一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54068484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com