我正在为android做一个下载应用程序。下载部分现已成功实施并且可以正常工作。我需要的是分段并行下载文件。更清楚地说,如果用户指定 8 个段,我想创建 8 个线程并进行下载。那么我可以通过什么方式动态创建 8 个线程呢?另外,当我为手机执行此操作时,我如何才能将内存消耗保持在最低水平?我以前没有使用过线程,所以我希望你能帮助我。感谢您的时间!:)
问问题
164 次
2 回答
5
创建固定数量线程的最有效方法是使用ExecutorService:
ExecutorService exec = Executors.newFixedThreadPool(8);
它基本上是一个固定大小的线程池,从开发人员那里承担了大量的管理负担。
编辑:所以你的流程应该是这样的:
首先,定义你的线程任务类(每个线程都会执行call
自己任务的方法):
class ThreadTask implements Callable<Object> {
public Object call() {
// execute download
...
return result;
}
}
如果您想向任务传递任何参数,请将一些私有字段放在上面的类中并通过构造函数传递它们。此外,您可以从 中返回任何类型call
,只需更改implements Callable<...>
部分中的类型。
当你想触发线程时,创建池并提交任务:
ExecutorService exec = Executors.newFixedThreadPool(8);
List<Future<Object>> results = new ArrayList<Future<Object>>();
// submit tasks
for(int i = 0; i < 8; i++) {
results.add(exec.submit(new ThreadTask()));
}
...
// stop the pool from accepting new tasks
exec.shutdown();
// wait for results
for(Future<Object> result: results) {
Object obj = result.get();
}
于 2012-07-06T07:13:06.900 回答
1
看一下ExecutorService
,特别是Executors.newFixedThreadPool(int i),这是在系统友好的问题上处理线程的好方法。
于 2012-07-06T07:12:27.970 回答