1

我想弄清楚在java中调用一个任务'x'次并且全部并行的最简单的方法。该任务有一个字符串变量,其值对于每次调用都应该是唯一的,并且它返回一个字符串和整型结果。并行执行任务'n'

我一直在网上查找资源,现在我非常困惑。

回答

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(); 
    ... 
} 
+0

谢谢!现在,如果我想编程它,以便代码不等待所有线程完成,例如:我希望线程在完成时返回,这是我想要使用的类。 – user2882622

+0

如果您的意思是要提交所有任务,然后按照它们生成的顺序检索结果,则可以使用CompletionService:http://docs.oracle.com/javase/1.5.0/docs/api/java/util /concurrent/ExecutorCompletionService.html – Flavio