草庐IT

java - 并行流与流并行

我一直很好奇Collections.parallelStream()和Collections.stream().parallel()的区别。根据Javadocs,parallelStream()尝试返回并行流,而stream().parallel()返回并行流。通过我自己的一些测试,我没有发现任何差异。这两种方法的区别在哪里?一种实现比另一种更省时吗?谢谢。 最佳答案 即使他们目前表现相同,也存在差异-至少在他们的文档中,正如您正确指出的那样;据我所知,将来可能会被利用。目前parallelStream方法在Collection接口

java - 在 Java 的并行线程中写入文件的最佳方法是什么?

我有一个程序可以执行大量计算并经常将它们报告到文件中。我知道频繁的写入操作会大大降低程序速度,因此为避免这种情况,我希望有第二个线程专门用于写入操作。现在我正在用我写的这个类做(不耐烦的可以跳到问题的末尾):publicclassParallelWriterimplementsRunnable{privateFilefile;privateBlockingQueueq;privateintindentation;publicParallelWriter(Filef){file=f;q=newLinkedBlockingQueue();indentation=0;}publicParal

Java 将两个 double[][] 与并行流相加

假设我有这两个矩阵:double[][]a=newdouble[2][2]a[0][0]=1a[0][1]=2a[1][0]=3a[1][1]=4double[][]b=newdouble[2][2]b[0][0]=1b[0][1]=2b[1][0]=3b[1][1]=4以传统方式,为了对这些矩阵求和,我会做一个嵌套的for循环:introws=a.length;intcols=a[0].length;double[][]res=newdouble[rows][cols];for(inti=0;i我对流API相当陌生,但我认为这非常适合与parallelStream一起使用,所以我的问

java - 并行化 for 循环

我有一个for循环,其中迭代i的计算不依赖于先前迭代中完成的计算。我想并行化for循环(我的代码在java中),以便可以在多个处理器上同时运行多个迭代的计算。我是否应该为每次迭代的计算创建一个线程,即要创建的线程数等于迭代次数(for循环中的迭代次数很大)?如何做到这一点? 最佳答案 这是一个小示例,您可能会发现它对开始使用并行化很有帮助。它假设:您创建一个Input对象,其中包含每次计算迭代的输入。您创建一个Output对象,其中包含计算每次迭代输入的输出。您希望传入一个输入列表并一次返回一个输出列表。您的输入是一项合理的工作,因

java - Java-8 的 DoubleStream.sum() 方法在并行运行时是否稳定?

我很好奇Java8中的以下构造:double[]doubles=//...doublesum=DoubleStream.of(doubles).parallel().sum();切入正题:sum的值是否始终相同,例如什么时候在不同的计算机上运行?更多背景...浮点算术是有损的并且(与实值算术不同)不是关联的。因此,除非注意工作的划分和重组方式,否则可能会导致不确定的结果。我很高兴地发现sum()方法使用了KahanSummation在引擎盖下。这显着减少了错误,但仍然不能给出精确的*结果。在我的测试中,重复调用似乎每次都返回相同的结果,但我想知道我们可以安全地假设它有多稳定。例如:在所

java - 是否不鼓励在 Java EE 容器中使用 Java 8 并行流?

鉴于spawningthreadsinJavaEEcontainersarediscouraged.会使用Java8parallelstreams,这可能会在JavaEE中产生线程? 最佳答案 注意,优雅降级到单线程是不可用的。我还认为这是因为Shorn的回答和邮件列表讨论,但我发现不是在研究thisquestion时.该机制不在JavaEE7规范中,也不在glassfish4.1中。即使另一个容器这样做,它也不是可移植的。您可以通过调用以下方法进行测试:@SingletonpublicclassSomeSingleton{publ

Java 8 并行排序与 Scala 并行排序

所以我只是在学习新的Java8,特别是lambda和日期和时间API。我正在将它与scala进行比较。我的基本想法是找到命令式、流和并行流之间的执行时间差异。所以我决定创建一个图书馆应用程序并执行一些操作,如搜索、过滤、排序等。我创建了一个图书馆类,其中包含一个名为书籍的列表字段,并用1000本书填充它。然后为搜索创建了一个功能界面,并对所有三种样式进行了一些操作。一切都很好。我的代码是://FunctionalInterfaceinterfaceSearch{publicvoidsearch(Tt);}//LibraryclassfinalLibrarylibrary=newLibr

Java 并发和并行 GC

本文here建议使用-XX:+UseParNewGC“ToenableaparallelyounggenerationGCwiththeconcurrentGC”。我的困惑是,为了同时启用并行和并发GC,我应该使用-XX:+UseParNewGC或同时使用-XX:+UseParNewGC和-XX:+UseConcMarkSweepGC?PS我正在使用JVM6。 最佳答案 由于您链接的文档适用于1.4.2虚拟机,因此我假设您使用的是1.4.2虚拟机(JVM5和6的行为不同)。来自http://java.sun.com/docs/hot

java - Java中的并行编程

我们如何在Java中进行并行编程?有什么特殊的框架吗?我们怎样才能让这些东西发挥作用?我会告诉你们我需要什么,认为我开发了一个网络爬虫,它从互联网上爬取了大量数据。一个爬行系统不会让事情正常工作,所以我需要更多的系统并行工作。如果是这种情况,我可以应用并行计算吗?可以举个例子吗? 最佳答案 如果您询问的是纯并行编程,即非并发编程,那么您绝对应该尝试MPJExpresshttp://mpj-express.org/.它是mpiJava的线程安全实现,同时支持分布式和共享内存模型。我试过了,发现非常可靠。1importmpi.*;23/

java - 在java中并行化任务的最简单方法是什么?

假设我有这样的任务:for(Objectobject:objects){Resultresult=compute(object);list.add(result);}并行化每个compute()的最简单方法是什么(假设它们已经可并行化)?我不需要与上述代码严格匹配的答案,只是一个一般性的答案。但如果您需要更多信息:我的任务是IO绑定(bind)的,这是针对SpringWeb应用程序的,任务将在HTTP请求中执行。 最佳答案 我建议看看ExecutorService.特别是这样的:ExecutorServiceEXEC=Executo