2013-02-20 110 views
0

我使用AsyncHttpClient來獲得一些JSON。我的方法將通過JSON進行解析並將觸發另一個獲取請求,所以實際上我不知道有多少個線程正在運行。經過一番搜索之後,我想我可以使用ThreadPoolExecutor來了解我的所有線程何時完成,因此我可以寫入數據庫。如果我使用AsyncHttpClient.get(),執行者將如何知道我提交了一份工作?AsyncHttpClient與ThreadPoolExecutor知道所有任務何時完成?

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

我沒有看到你提交作業到ThreadPoolExecutor

示例代碼:

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

編輯:

我剛纔注意到,您覆蓋默認ThreadPoolExecuter of AsyncHttpClient因此它會在發出請求時使用它(例如012它應該在沒有明確發送任何內容的情況下工作executor

您也可以重寫方法terminated()而不是循環直到所有任務完成。

+0

對,也許我的問題不清楚。如果我使用AsyncHttpClient.get(),執行程序如何知道我提交了一份工作? – heero 2013-02-20 20:51:37

+0

您正在覆蓋'AsyncHttpClient'的默認'ThreadPoolExecuter',以便在發出請求時使用它 – iTech 2013-02-20 20:52:41

+0

好吧我認爲我現在明白了,但由於AsyncHttpClient.get()是異步調用,所以這樣不好嗎? – heero 2013-02-20 20:55:02

相關問題