本文介绍了"&的Parallel.For QUOT;对于Java?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想知道是否有相当于Java的.net版本?
I was wondering if there is a Parallel.For equivalent to the .net version for Java?
如果有人可以提供一个例子吗?谢谢!
If there is could someone please supply an example? thanks!
推荐答案
我猜最接近的是:
ExecutorService exec = Executors.newFixedThreadPool(SOME_NUM_OF_THREADS);
try {
for (final Object o : list) {
exec.submit(new Runnable() {
@Override
public void run() {
// do stuff with o.
}
});
}
} finally {
exec.shutdown();
}
根据TheLQ的评论,您可以将SUM_NUM_THREADS设置为 Runtime.getRuntime()。availableProcessors();
Based on TheLQ's comments, you would set SUM_NUM_THREADS to Runtime.getRuntime().availableProcessors();
编辑:决定添加基本的Parallel.For实现
Decided to add a basic "Parallel.For" implementation
public class Parallel {
private static final int NUM_CORES = Runtime.getRuntime().availableProcessors();
private static final ExecutorService forPool = Executors.newFixedThreadPool(NUM_CORES * 2, new NamedThreadFactory("Parallel.For"));
public static <T> void For(final Iterable<T> elements, final Operation<T> operation) {
try {
// invokeAll blocks for us until all submitted tasks in the call complete
forPool.invokeAll(createCallables(elements, operation));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static <T> Collection<Callable<Void>> createCallables(final Iterable<T> elements, final Operation<T> operation) {
List<Callable<Void>> callables = new LinkedList<Callable<Void>>();
for (final T elem : elements) {
callables.add(new Callable<Void>() {
@Override
public Void call() {
operation.perform(elem);
return null;
}
});
}
return callables;
}
public static interface Operation<T> {
public void perform(T pParameter);
}
}
Parallel.For的示例用法
// Collection of items to process in parallel
Collection<Integer> elems = new LinkedList<Integer>();
for (int i = 0; i < 40; ++i) {
elems.add(i);
}
Parallel.For(elems,
// The operation to perform with each item
new Parallel.Operation<Integer>() {
public void perform(Integer param) {
System.out.println(param);
};
});
我想这个实现更类似于
I guess this implementation is really more similar to Parallel.ForEach
修改
如果有人有兴趣我把它放在GitHub上。
这篇关于"&的Parallel.For QUOT;对于Java?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!