在Java中的异步任务中实现忙等待

时间:2017-02-09 17:11:45

标签: java

我正在使用Java 7构建程序,我需要从后端服务器下载多个文件,具体取决于下载的文件值。

我会解释:

首先,我的程序通过AsyncTask下载文件,该文件包含要下载的文件的值。 onPost方法它调用一个不同的方法,下载这些文件并在将它们操作到我的应用程序数据后将它们插入到数组列表中。

现在,为了创建某种处理这些AsyncTasks的结尾,我创建了一个不同的AsyncTask以便创建一个繁忙的等待,考虑到我知道要下载多少文件,我检查了它的大小数组等于while循环中的文件号。

我的问题是,AsyncTask中的忙等待是否会禁用操作系统释放正在运行的处理器的能力,或者没什么可担心的?

我不希望繁忙的等待锁定处理器以便更快地下载文件,或者甚至是否重要?

因为我假设异步任务有自己的apoc并在需要时进入休眠状态我假设这个忙碌的等待不会滥用处理器?

需要下载的文件数量是否会影响处理时间?如果是的话,下载带有数据的单个文件是否比将下载多线程化为几百个较小的文件要好?

最后,在AsyncTask中编写自己忙碌的等待是一种好习惯吗?

我很快就会添加一些代码片段......

1 个答案:

答案 0 :(得分:0)

编写自己的XYZ是一个好习惯 - 不,几乎从不,除非它是Free vs proprietary,这是针对新语言或平台,你正在进行大学研究或标准实施是如此糟糕,你有现实的机会接管。在这种情况下,以上都不是真的。

我建议使用java.util.concurrent包的标准部分。它有许多对您的项目非常有用的类,包括实现所需等待功能的Future类。期货可以通过多种方式在那里实施的执行者服务返回。

如果您需要对流程进行更多控制,也可以使用CyclicBarrier。它允许一个线程等到另一个线程完成某个东西,如果您认为下载可能会停止,则可以使用超时。

要清楚直接地回答,不,没有一个好的做法来实现本地框架的功能,这些功能可以作为标准运行时的一部分免费提供。有或没有忙碌的等待,甚至不重要。