我正在为android做一个下载应用程序。下载部分现已成功实施并正常运行。 我需要的是按段并行下载文件。更清楚的是,如果用户指定8个段,我想创建8个线程并进行下载。 那么我将以什么方式动态创建8个线程?另外,当我为手机做这个时,我怎样才能将内存消耗保持在最低水平? 我之前没有使用过线程,所以我希望你能帮助我。感谢您的时间! :)
答案 0 :(得分: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();
}
答案 1 :(得分:1)
看看ExecutorService
,特别是Executors.newFixedThreadPool(int i),这是处理系统友好问题中线程的绝佳方法。