【发布时间】:2014-05-15 18:11:13
【问题描述】:
鉴于spawning threads in Java EE containers are discouraged。是否不鼓励在 Java EE 中使用Java 8 parallel streams,它可能会产生线程?
【问题讨论】:
-
@RobertHarvey 在 JavaEE 中使用线程是令人沮丧的——Java 8 引入了并行流(在后台使用线程)。我们可以在 JavaEE 中使用并行流还是不鼓励这样做?我认为这是一个公平而有趣的问题。我已经改写了一点 - 它可能会进一步改进。
-
@罗伯特哈维?不鼓励使用线程(甚至某些规范禁止使用线程),因为线程是由应用程序服务器本身管理的(参见右侧的第一个链接)——使用并行流可能会“破坏”——或者不会。这就是问题所在。根据规格,它可能会或可能不会“破坏东西”:这不是一种意见。只是我的 2 cts。您的电话 - 我今天休息! ;-)(做出决定后可以随意删除噪音)
-
是的,它会破坏东西。例如,安全和事务上下文由 ThreadLocal 变量处理。而且 JPA 实体不是线程安全的。因此,无论您以何种方式生成线程,都会破坏安全性和事务处理。如果您想在 Java EE 环境中的线程中执行任务,Java EE 7 规范引入了应该使用的特殊执行器。但是 Java EE 落后于 Java SE,还没有为并行流做好准备。
-
这是一个很好的问题,Java EE 工程师已经回答了。它们恢复为所有并行操作的顺序处理。您可以在 lambda-dev@openjdk.java.net 邮件列表中找到讨论。
标签: java jakarta-ee ejb java-8 java-stream