14

我想在 Java 中没有等效的任务并行库(.NET 4.0)。真的吗?.NET 的这一特性提供了哪些 Java 并发没有的改进。

4

4 回答 4

13

Java 有java.util.concurrent包,还有fork/join 框架。Fork/join计划包含在 Java 7 中,但现在可以下载并与 Java 6 一起使用。

一本掌握 Java 并发的好书是Java Concurrency in Practice,作者是 Brian Goetz 和其他人。

于 2010-11-07T12:01:40.810 回答
4

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 课程网站上提供了各种并行结构的更多示例。

于 2014-05-29T00:07:05.847 回答
1

据我所知,Java 中没有等价物。

我写了一个受 TPL 启发的 Java 任务库。它不支持 TPL 的所有功能,但符合我当时的要求。

Github:https ://github.com/BrunoMNDantas/TPL4J

Maven:https ://mvnrepository.com/artifact/com.github.brunomndantas/tpl4j

于 2019-03-12T12:52:38.467 回答
0

是的。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)解决方案。

于 2018-09-09T20:15:38.163 回答