2017-02-09 51 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