行がテーブルに存在しない限り、30秒ごとにメソッドを呼び出します

アルヤ:

私は、データベーステーブル毎秒、行をチェックするチェック以下のクラスがあります。行が存在する場合には、設定されますincludeForceUpdate = true

データベーステーブルに行が含まれていない場合は、私が欲しいsendUpdate、それが呼び出された最後の時間から30秒ごとに呼び出されますし。

いつでも新しい行がテーブルに利用可能になるならば、sendUpdateすぐに呼び出されますと時間から30秒タイマーが開始さがsendUpdate呼ばれました。

テーブルには、常に新しい行をチェック取得する必要があります。

私はこれをやって周りの私の心をラップすることはできません。う、私はより多くのスレッドを使用する必要がありますか?

簡単に言えば、私は次のことが起こるしたいです

sendUpdate 30秒ごとに実行する必要があります。

しかし、いつでもデータベース内に新しい行があるならば、sendUpdate30秒待ちをバイパスしてすぐに実行する必要があります。

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

}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=190343&siteId=1