并行执行任务'n'次

时间:2013-10-18 07:38:20

标签: multithreading parallel-processing java.util.concurrent

我试图弄清楚在java中并行调用任务'x'次的最简单方法。该任务有一个字符串变量,其值应该对每次调用都是唯一的,并返回一个字符串和int结果。

我一直在寻找互联网上的资源,现在我非常困惑。

1 个答案:

答案 0 :(得分:1)

为了并行执行任务,您的首选应该是ExecutorService。 你得到一个像他们在文档中说的那样的实例,即

ExecutorService service = Executors.newFixedThreadPool(poolSize);

如果您的任务必须返回值,则应使用

Future<T> submit(Callable<T> task);

功能。使您的任务实现Callable接口,返回您需要的结果。将您的任务提交给服务,然后通过Future对象等待结果。粗略草图:

public class MyTask implements Callable<StringInt> {
    public MyTask(String inputParameter) { ... }
    public StringInt call() { ... }
}

...

List<Future<StringInt>> results = new ArrayList<Future<StringInt>>();
ExecutorService service = Executors.newFixedThreadPool(16);
for (String inputParameter : inputParameters) {
    // Create tasks and start parallel execution
    results.add(service.submit(new MyTask(inputParameter)));
}

for (Future<StringInt> result : results) {
    // Wait for tasks to end, and get result
    StringInt resultValue = result.get();
    ...
}