プロパティを使用して「アイドル待機」モデルを実行するにはどうすればよいですか。
- メソッド
do()
が呼び出されると、X遅延後、close()
メソッドが呼び出されます。 - X時間が経過する前
do()
にメソッドを再度呼び出すと、への呼び出しを延期する必要があります。close()
例
シナリオ1:(タイムアウト=10秒の場合):
- ユーザーは
do()
時間に電話をかけ0
ます。 - の時点
10
で、ユーザーが再度呼び出していないため、close()
メソッドが呼び出されdo()
ます。
シナリオ2:(タイムアウト=10秒):
- ユーザーは
do()
時間に電話をかけ0
ます。(したがって10
、close()
メソッドで呼び出す必要があります)。 - の時点で
8
、ユーザーはdo()
再度電話をかけます。 - が10秒延期された
10
ため何も起こらない時。close()
- の時点で、ユーザーが。以降に再度呼び出していないため
18
、close()
メソッドが呼び出されます。do()
8
私が試したこと:
private static final long delay = 10000;
private Timer t;
private TimerTask tt;
public void do() {
...
// check old timer first:
if (t != null) t.cancel();
// create new timer
t = new Timer();
tt = new TimerTask() {
@Override
public void run() {
close();
}
}
// run it
t.schedule(tt, System.currentTimeMillis() + delay);
}
private void close() {
// do some cleanup here
}
このコードは非常に醜いです。また、 do()
関数が1秒間に約50回呼び出されるため、非常に非効率的でメモリを消費します。
これを効率的かつきちんと機能させるにはどうすればよいですか?(本当に大変ですか?)