2012-02-09 8 views
3

私は、ネットワーク上のデータを取得するためのシングル・スレッド・エグゼキュータ・サービスを持っています。ExecutorServiceは最近追加されたコールのみを呼び出します

ユーザが検索ボックスに入力するとき、私は可能なネットワークタスクを待ち行列に入れています。私が望むのは、以前のすべてのリクエストを取り消して、すぐに最新のものをエンキューしてすぐに実行することです。

私の現在の方法は、superを呼び出す前にexecute()メソッドとsubmit()メソッドをオーバーライドしてキューをクリアすることです。

これについてのご意見はありますか?

答えて

5

サービスを呼び出すときに返されたFutureを保存しないでください。また、実行したくない場合は、cancel()の未来を保存してください。

IMO

Future f1 = service.submit(some_task); 

// later 

f1.cancel(true); // will interrupt if running... 

クリーナー...

+0

1 - あなたがする必要がない場合は上書きするにはポイント。 – berry120

+0

ユーザーが入力するにつれて、要求が待ち行列に入れられる。私はこれらすべての要求をスキップし、最後に実行されたものだけを実行したい。 – dnkoutso

+0

@dnkoutso、そう、すべての先物をリストに保存し、前のものをすべてキャンセルしてから新しいものを追加する... – Nim

関連する問題