2017-02-09 52 views
0

我正在Java 7中構建程序,並且需要根據不同的下載文件值從後端服務器下載多個文件。在Java中的異步任務中實現繁忙等待

我會解釋:

首先,我的程序下載通過的AsyncTask文件這個文件中包含的文件下載的價值。 onPost方法調用一個不同的方法來下載這些文件,並在將它們處理到我的應用程序數據中之後將它們插入到數組列表中。

現在,爲了創建某種處理這些AsyncTasks的結尾,我創建了一個不同的AsyncTask以創建一個繁忙的等待,考慮到我知道要下載多少個文件,我檢查了它的大小的數組等於while循環中的文件編號。

我的問題是,AsyncTask中的這種繁忙等待是否會禁用操作系統釋放正在運行的處理器的能力,或者無需擔心?

我不希望忙着等待來鎖定處理器,以便更快地下載文件,或者它甚至有影響嗎?

因爲我假設異步任務有它自己的apoc並在需要時進入休眠我假設這種繁忙的等待不會濫用處理器?

需要下載的文件數量是否會影響處理時間?如果是,使用數據下載單個文件是否比多線程下載成幾百個較小的文件更好?

最後,在AsyncTask中編寫我自己的忙等待是否是一個好習慣?

我很快就會添加一些代碼片段...

+0

1.不要忙着等。 2.找到另一個解決方案... :)你的代碼知道什麼時候所有下載都完成了 - 最後一個添加到列表中的列表將看到該列表已滿,並且可以在那裏觸發事件。 – ZhongYu

回答

0

是一個很好的做法,以寫我自己的XYZ - 不,幾乎沒有,除非它的免費VS專有的,這是新的語言或平臺,你正在進行大學研究,或者標準實施太糟糕了,你有接管的現實機會。在這種情況下,以上都不是真的。

我建議使用java.util.concurrent包的標準部分。它有很多對您的項目非常有用的類,包括實現您所需等待功能的Future類。執行者服務可以以多種方式返回期貨。

如果您需要更多的控制過程,也可以使用CyclicBarrier。它允許一個線程等待另一個線程完成某些任務,如果您認爲下載可能會停止,則可以使用超時。

要清楚而直接地回答,不,沒有一個好的做法來實現本地出現的框架,以實現作爲標準運行時的一部分免費提供的重複功能。無論是否等待,甚至都不重要。

+0

在發佈這個問題之前,我已經閱讀了關於Future類的內容,並且看起來很有幫助,所以讓我直接說明一下,我所要做的就是而不是執行.execute()將任務添加到執行程序服務中? – user2438341

+0

是的,提交Callable,你會回到Future。 – h22