2

我正在为android做一个下载应用程序。下载部分现已成功实施并且可以正常工作。我需要的是分段并行下载文件。更清楚地说,如果用户指定 8 个段,我想创建 8 个线程并进行下载。那么我可以通过什么方式动态创建 8 个线程呢?另外,当我为手机执行此操作时,我如何才能将内存消耗保持在最低水平?我以前没有使用过线程,所以我希望你能帮助我。感谢您的时间!:)

4

2 回答 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 回答