我正在使用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");
}
答案 0 :(得分:0)
我看不到您将工作提交到ThreadPoolExecutor
示例代码:
executor.execute(new Runnabale() {
public void run() {
// your job code
}
});
修改强>
我刚刚注意到你覆盖了ThreadPoolExecuter
的默认AsyncHttpClient
所以它会在发出请求时使用它(例如get
),它应该在没有明确发送任何内容的情况下工作executor
您还可以覆盖方法terminated()
,而不是循环,直到所有任务完成。