我想在 Java 中没有等效的任务并行库(.NET 4.0)。真的吗?.NET 的这一特性提供了哪些 Java 并发没有的改进。
4 回答
Java 有java.util.concurrent
包,还有fork/join 框架。Fork/join计划包含在 Java 7 中,但现在可以下载并与 Java 6 一起使用。
一本掌握 Java 并发的好书是Java Concurrency in Practice,作者是 Brian Goetz 和其他人。
Habanero-Java 库(HJ-lib) 是 Habanero-Java (HJ) 的新库实现,这是莱斯大学正在开发的教学并行编程模型。HJ-lib 能够表达多种不同形式的并行模式,包括数据并行、管道并行、流并行、循环并行和分治并行。
HJ-lib 在单个编程模型中集成了广泛的并行编程结构(例如,异步任务、期货、数据驱动任务、forall、障碍、移相器、事务、参与者),从而可以实现这些结构的独特组合(例如,嵌套任务和参与者并行性的组合)。
HJ-lib 是使用lambda 表达式构建的,可以在任何 Java 8 JVM 上运行。较旧的 JVM 可以通过依赖外部字节码转换工具来实现兼容性。HJ 运行时负责编排 HJ 任务的创建、执行和终止,并具有工作共享和工作窃取调度程序。
HJ-lib 对于教育工作者来说也是一个有吸引力的工具,它提供了大量的教育资源,可从莱斯大学提供的二年级COMP 322 课程中获得。这些资源也可用于了解库 API。API 的 Javadoc也可用。
这是一个简单的 HelloWorld 版本:
import static edu.rice.hj.Module1.*;
public class HelloWorld {
public static void main(final String[] args) {
launchHabaneroApp(() -> {
finish(() -> {
async(() -> System.out.println("Hello"));
async(() -> System.out.println("World"));
async(() -> System.out.println("in"));
async(() -> System.out.println("HJ-lib"));
});
});
}
}
COMP 322 课程网站上提供了各种并行结构的更多示例。
据我所知,Java 中没有等价物。
我写了一个受 TPL 启发的 Java 任务库。它不支持 TPL 的所有功能,但符合我当时的要求。
Github:https ://github.com/BrunoMNDantas/TPL4J
Maven:https ://mvnrepository.com/artifact/com.github.brunomndantas/tpl4j
是的。Java 没有等效的任务并行库 - TPL(.NET 4.0)。你的问题是对的(主要词 - NET 4.0)。TPL 是“共享的”——适用于任何.NET 应用程序的通用统一 .NET 库。这意味着您可以使用真正异步(非阻塞 UI)方法为任何 .NET 应用程序(WPF、WinForms、Xamarin.Forms、ASP.NET...)提供单个共享异步逻辑。Java没有。JavaFX 有特殊的非阻塞任务类,Swing - 后台工作者,Android - 自己的方法。...因此命名为 util.concurrency Java 包没有任何不可冻结的 UI(JavaFX、Swing)解决方案。