簡體   English   中英

在Java中的異步任務中實現繁忙等待

[英]Implementing busy wait within an async task in Java

我正在用Java 7構建程序,我需要根據不同的下載文件值從后端服務器下載多個文件。

我會解釋:

首先,我的程序通過AsyncTask下載了一個文件,該文件包含要下載的文件的值。 onPost方法會調用另一種方法,該方法將下載這些文件並將它們處理到我的應用程序數據中后插入到數組列表中。

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

我的問題是,是否在AsyncTask中進行這種繁忙的等待會禁用操作系統釋放正在運行的處理器的功能,還是沒有什么可擔心的?

我不想忙於等待鎖定處理器以便更快地下載文件,還是有關系嗎?

由於我假設異步任務具有自己的apoc並在需要時進入睡眠狀態,因此我認為這種繁忙的等待不會濫用處理器嗎?

是否需要下載的文件數量會影響處理時間? 如果是的話,下載帶有數據的單個文件是否比將下載多線程化為幾百個較小的文件更好?

最后,在AsyncTask中編寫自己的繁忙等待是一種好習慣嗎?

我會盡快添加一些代碼段...

編寫我自己的XYZ是一個好習慣嗎-不,幾乎永遠不會,除非它是Free與專有的,這是針對新語言或平台的,您正在大學研究中,或者標准實施太爛,以至於您沒有實際機會過度。 在這種情況下,以上都不是正確的。

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

如果您需要對該過程進行更多控制,則還可以使用CyclicBarrier 它允許一個線程等待另一個線程完成某件事,如果您認為下載可能停止,可以使用超時。

為了清楚,直接地回答,沒有,沒有很好的實踐來實現用於復制功能的本地框架,該框架可作為標准運行時的一部分免費提供。 無論忙碌與否,都無所謂。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM