gpt4 book ai didi

java - 我应该在后端(在 Java 中)使用 WorkManager 进行多线程处理吗?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:40:24 24 4
gpt4 key购买 nike

我从事 Java 网络应用程序的后端工作。我添加了一些多线程来加速大数据检索,并且我使用了一些我在这个过程中创建的 ExecutorServices。但是,我读到在 Web 应用程序中以这种方式创建线程可能不是一个好主意,并且“com.ibm.websphere.asynchbeans.WorkManager”可能是一个选项。不过在后端使用似乎不是很友好。根据文档,工作管理器是“为使用异步 bean 的 Java 平台企业版 (Java EE) 应用程序创建的线程池”。我,作为一个非常前端无知的后端人,甚至不完全知道bean是什么。看起来工作管理器并不是我想要的,但如果手动创建 ExecutorService 实际上不是一个好主意,我不确定最好的方法是什么。

最佳答案

在 Web 应用程序的后端创建自己的线程不是一个好主意,原因如下:应用程序服务器容器为您管理线程。因此,如果您在应用程序中创建自己的线程,容器将不会知道它们,也无法管理它们。因此,如果您对线程管理不善,您的应用程序可能会导致内存泄漏和其他与线程相关的问题。从理论上讲,最好的方法是在您的 App Server 中注册一些线程池,并使用 JNDI 从容器中请求线程。但这可能有点矫枉过正。所以有时,您可能想要管理自己的线程。因此,在这种情况下,ExecutorService 是最好的方式,因为它提供了非常好的 API 来管理您的线程。只需确保在关闭应用程序时关闭 ExecutorService,这样就不会留下任何孤立线程。如果你对此很小心,那么你可以创建自己的线程。请谨慎使用它们,并注意在完成或应用程序关闭时关闭 ExecutorService。顺便说一句,ThreadLocal 变量也有类似的问题。完成后,您绝对必须在其中调用 metod remove(),否则即使您的应用程序关闭,它们也会保留在内存中,只有重新启动 Application Server 才能清除它们。这是一个危险的内存泄漏。

关于java - 我应该在后端(在 Java 中)使用 WorkManager 进行多线程处理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40748580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com