アルヤ:
私は、データベーステーブル毎秒、行をチェックするチェック以下のクラスがあります。行が存在する場合には、設定されます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();
}
}
}