【发布时间】:2011-05-06 06:41:01
【问题描述】:
我猜在 Java 中没有与任务并行库(.NET 4.0 的)等效的东西。真的吗? .NET 的这一特性提供了哪些 Java 并发没有的改进。
【问题讨论】:
标签: c# java concurrency task-parallel-library
我猜在 Java 中没有与任务并行库(.NET 4.0 的)等效的东西。真的吗? .NET 的这一特性提供了哪些 Java 并发没有的改进。
【问题讨论】:
标签: c# java concurrency task-parallel-library
Java 有java.util.concurrent 包,还有fork/join framework。 Fork/join 在 Java 7 中是 scheduled for inclusion,但可以是 downloaded now 并与 Java 6 一起使用。
Brian Goetz 等人撰写的《Java Concurrency in Practice》是一本了解 Java 并发的好书。
【讨论】:
Habanero-Java library (HJ-lib) 是 Habanero-Java (HJ) 的新库实现,Rice University 正在开发一种教学并行编程模型。 HJ-lib 能够表达多种不同形式的并行模式,包括数据并行、管道并行、流并行、循环并行和分治并行。
HJ-lib 将广泛的并行编程结构(例如,异步任务、期货、数据驱动任务、forall、障碍、移相器、事务、参与者)集成在一个单一的编程模型中,可以实现这些结构的独特组合(例如,任务和参与者并行性的嵌套组合)。
HJ-lib 是使用 lambda expressions 构建的,可以在任何 Java 8 JVM 上运行。较旧的 JVM 可以通过依赖外部字节码转换工具来实现兼容性。 HJ 运行时负责编排 HJ 任务的创建、执行和终止,并具有工作共享和工作窃取调度程序。
HJ-lib 对于教育工作者来说也是一个有吸引力的工具,它提供了大量的教育资源,可从莱斯大学提供的二年级COMP 322 course 获得。这些资源也可用于了解库 API。 API 的 Javadoc 是 also available。
这是一个简单的 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 course website 提供了各种并行结构的更多示例。
【讨论】:
据我所知,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 是“共享的” - ANY .NET 应用程序的通用统一 .NET 库。这意味着您可以使用真正异步(非阻塞 UI)方法为任何 .NET 应用程序(WPF、WinForms、Xamarin.Forms、ASP.NET...)提供单一共享异步逻辑。 Java没有。 JavaFX 有特殊的非阻塞任务类,Swing - 后台工作者,Android - 自己的方法。 ...因此命名为 util.concurrency Java 包没有任何不可冻结的 UI(JavaFX、Swing)解决方案。
【讨论】: