我想知道是否有Parallel.For等效于Java的.net版本?
如果有人可以提供示例?谢谢!
我猜最接近的是:
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();
编辑:决定添加一个基本的“ Parallel.For”实现
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);
};
});
我想这个实现实际上更类似于Parallel.ForEach
编辑
如果有人有兴趣,我将其放在GitHub上。在GitHub上并行
本文向大家介绍c#语言Parallel.For,包括了c#语言Parallel.For的使用技巧和注意事项,需要的朋友参考一下 示例 一个使用Parallel.For循环对网站网址的给定数组执行ping操作的示例。
问题内容: 我有一类范围 如果我使用正常的工作原理是完美的,但是必须等待每个命令完成并且每个查询需要8秒钟,所以10个查询需要80秒钟。 在并行版本中,如果仅打印范围,则效果很好,但如果尝试执行命令,则说明该过程已在进行中。 {“操作已经在进行中。”} 我该如何解决? 问题答案: Npgsql连接不能同时使用-在任何给定时间点只能运行一个命令(换句话说,没有MARS支持)。 打开多个连接以并行执行
问题内容: 我需要从Java调用CPython代码。有哪些工具/ API /库可以帮助我做到这一点? Jython不是一个选择,因为Python代码严重依赖。 编辑1:该函数应该是Java,而不是Python(即,我需要将CPython嵌入Java中,反之亦然。) 编辑2:我还应该提到,我将在Java和Python之间传递大型数值数组,因此,最好将两者合并到同一进程空间中的解决方案(但不是强制性的
问题内容: 已锁定 。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 Java 因其速度慢而享有一定的声誉。 Java真的很慢吗? 如果是,为什么?瓶颈在哪里?是因为JVM效率低下吗?垃圾收集?纯字节码库而不是JNI包装的C代码?许多其他语言都具有这些功能,但是它们并没有因速度慢而享有盛誉。 问题答案: 现代Java是最快的语言之一,即使它仍然是内存消耗大的
问题内容: 我的问题可能太广泛了,答案可能是简单的“否”,但我不得不问。 Java 7中有(Java 8)流 *的等效实现吗? 我熟悉(Java 8)流,但是我的项目要求是使用Java 7。 *不要与inputStream和outputStream混淆。 问题答案: 在官方API中,没有。 Java 7没有更多的公共更新。如果您是客户,您可能仍然会获得较小的更新,但是对于反向移植Stream AP
问题内容: 基本上,我希望每10毫秒调用一次函数。 如何在Java中实现? 问题答案: 您可能想看看Timer。