0

私はAsyncHttpClientいくつかのJSONを取得するために使用しています。私のメソッドはJSONを解析し、別のgetリクエストを起動するため、実際に実行されているスレッドの数はわかりません。ThreadPoolExecutorいくつか検索した後、すべてのスレッドがいつ終了したかを知るために使用できると思うので、データベースに書き込むことができます。私が使用している場合、エグゼキュータは私がジョブを送信したことをどのように知ることができAsyncHttpClient.get()ますか?

AsyncHttpClient client = new AsyncHttpClient();
int limit = 20;
BlockingQueue<Runnable> q = new ArrayBlockingQueue<Runnable>(limit);
ThreadPoolExecutor executor = 
                        new ThreadPoolExecutor(limit, limit, 20, TimeUnit.SECONDS, q);
client.setThreadPool(executor);
parseSilo(url, context); // this fires client.get() ... as it encounters urls in JSON feed
executor.shutdown();
while (!executor.awaitTermination(10, TimeUnit.SECONDS)) {
      Log.e(TAG, executor.getTaskCount() + " tasks left");
}
4

1 に答える 1

0

私はあなたがあなたの仕事をどこに提出するのかわかりませんThreadPoolExecutor

サンプルコード:

executor.execute(new Runnabale() {
    public void run() {
       // your job code
    }
});

編集:

ThreadPoolExecuterのデフォルトをオーバーライドしてAsyncHttpClientいるので、リクエストを発行するときに使用されることに気づきました(例get)。明示的に何も送信しなくても機能するはずです。executor

terminated()すべてのタスクが終了するまでループする代わりに、メソッドをオーバーライドすることもできます。

于 2013-02-20T20:49:06.820 に答える