1
我想弄清楚在java中调用一个任务'x'次并且全部并行的最简单的方法。该任务有一个字符串变量,其值对于每次调用都应该是唯一的,并且它返回一个字符串和整型结果。并行执行任务'n'
我一直在网上查找资源,现在我非常困惑。
我想弄清楚在java中调用一个任务'x'次并且全部并行的最简单的方法。该任务有一个字符串变量,其值对于每次调用都应该是唯一的,并且它返回一个字符串和整型结果。并行执行任务'n'
我一直在网上查找资源,现在我非常困惑。
为了并行执行任务,您的第一个选择应该是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();
...
}
谢谢!现在,如果我想编程它,以便代码不等待所有线程完成,例如:我希望线程在完成时返回,这是我想要使用的类。 – user2882622
如果您的意思是要提交所有任务,然后按照它们生成的顺序检索结果,则可以使用CompletionService:http://docs.oracle.com/javase/1.5.0/docs/api/java/util /concurrent/ExecutorCompletionService.html – Flavio