更好的java并发框架/抽象

更好的java并发框架/抽象,java,multithreading,data-analysis,fork-join,Java,Multithreading,Data Analysis,Fork Join,Java 5及更高版本中的并发显然比处理原始线程更好 关于fork和join以及内存中的数据结构(如并行阵列)的讨论给我留下了深刻的印象。不幸的是,Java7只剩下了fork和join的骨架,缺少了数据结构 我想知道是否有类似且经过良好测试的框架/抽象可以有效地对庞大的数据集进行聚合。我真的认为您应该看看RxJava: “它扩展了观察者模式,以支持数据/事件序列,并添加了运算符,允许您以声明方式将序列组合在一起,同时将诸如低级线程、同步、线程安全、并发数据结构和非阻塞I/O之类的问题抽象出来。”

Java 5及更高版本中的并发显然比处理原始线程更好

关于fork和join以及内存中的数据结构(如并行阵列)的讨论给我留下了深刻的印象。不幸的是,Java7只剩下了fork和join的骨架,缺少了数据结构


我想知道是否有类似且经过良好测试的框架/抽象可以有效地对庞大的数据集进行聚合。

我真的认为您应该看看RxJava:

“它扩展了观察者模式,以支持数据/事件序列,并添加了运算符,允许您以声明方式将序列组合在一起,同时将诸如低级线程、同步、线程安全、并发数据结构和非阻塞I/O之类的问题抽象出来。”

“很难使用Futures来优化组合条件异步执行流(或者不可能,因为每个请求的延迟在运行时都会发生变化)。当然,这可以做到,但它很快就会变得复杂(因此容易出错),或者过早地阻塞Future.get(),从而消除了异步执行的好处

另一方面,RxJava Observable用于构成异步数据的流和序列。

尽管@user1500191提到了这一点,但我可以为您添加另一个选项

Akka是一个工具包和运行时,用于在JVM上构建高度并发、分布式和容错的事件驱动应用程序


问题是你是否想留在爪哇岛。Scala提供了全面的未来实现和不可变的结构,可以提供更好的并发属性。另外,看看Spark,它是一个用于内存(大)数据分析的框架(构建在Scala上)。Umm RxJava和Java 8使这一论点陷入僵局——但Scala轻易赢得了一系列其他论点,其中#1是一个少得多的“仪式”代码。是的,Scala/clojures/CoreAync是功能人员建议的其他框架。但是一个具有并发和并行作业执行器的公共平台最合适。感谢您的回答。对于我的用例,Rx非常适合计算,但不适合阻塞io作业。我两者兼而有之。与从DB读取数据的stage1(粗粒度)、Stage2进程(细粒度)、stage3持久化(粗粒度)类似。对于粗粒度的线程池,executor最适合使用可调数量的线程,但对于细粒度的forx和join,使用固定数量的线程(~核数)是好的。框架应该适合这两个方面。Akka可能会解决问题,但我觉得我手头的用例太小,无法容纳Akka。可能是Rx,但它最适合我下面解释的一半问题。