簡體   English   中英

除非表中存在行,否則每30秒調用一次方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM