使用CompletableFuture是否安全?是否可以保证异步任务正确执行?

问题描述 投票:0回答:1

我想将异步模式CompletableFuture Java 8用于servlet。

但找到的信息:

仅在EJB规范中禁止创建线程。为了使容器更健壮,应在整个服务器过程中将其禁止使用。将线程创建从EJB移至例如Servlet不是一个合理的解决方案。

...

Enterprise Bean不得尝试管理线程。企业bean不得尝试启动,停止,挂起或恢复线程,也不能更改线程的优先级或名称。企业bean不得尝试管理线程组。“

使用CompletableFuture是否安全?是否可以保证异步任务的正确执行?

java multithreading ejb
1个回答
0
投票

如评论中所述,这取决于您打算如何使用它。

在EE环境中,唯一合法的线程池/执行者服务是托管执行者:

https://docs.oracle.com/javaee/7/api/javax/enterprise/concurrent/ManagedExecutorService.html

受管理,因为它是服务器管理和提供的资源,可以注入到您的EJB中。

@Resource(name = "wm/executorService")
ManagedExecutorService managedExecutorService;

已经注入了这样的资源,您有资格运行CompletableFuture的异步方法,只要明确提供此托管执行程序即可:

CompletableFuture<Void> result = CompletableFuture.runAsync(
                        yourBean::yourMethod,
                        managedExecutorService);
© www.soinside.com 2019 - 2024. All rights reserved.