[英]Call method every 30 seconds unless a row exists in table
我有以下類,每秒檢查一次數據庫表以檢查行。 如果存在行,則將設置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();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.