gpt4 book ai didi

java - 使用 CommonJ WorkManagerTaskExecutor Spring 3 进行多线程处理

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:57:31 30 4
gpt4 key购买 nike

大家好,我是论坛的新手,我只是有一个关于使用 Spring 的 commonj WorkManagerTaskExecutor 的问题。我一直在一堆论坛上寻找有关该主题的更好信息,但我还没有看到有关该主题的任何详细信息。这是我的情况。

我的应用程序使用多个线程,这些线程由 ThreadPoolTask​​Executor 处理,一位 friend 告诉我他认为这不是正确的选择,因为我们使用的是 websphere 7.0 应用程序服务器。我让一切正常工作,并且通过一些小的调整能够用 WorkManagerTaskExecutor 替换 ThreadPoolTask​​Executor。当我运行应用程序时,线程通过 websphere 服务器上的默认工作管理器触发。似乎正在发生的问题是,即使我使用的是 workManagerTaskExecutor.waitForAll(collection,timeout);它实际上从不等待线程完成。我知道线程正在执行它们各自的方法是有效的,因为如果你在所有这些之后发出一个冗长的 for 循环,那么数据就在那里,就像你不这样做一样,数据不在那里。我想知道以下两件事。

  1. WorkManagerTaskExecutor 是正确的选择吗?或者使用 ThreadPoolTask​​Executor 是否足以处理企业 Web 应用程序上的多个线程?

  2. WorkManagerTaskExecutor 是否可行?关于为什么 waitForAll 方法完成就像方法完成一样的任何想法?什么时候显然不是?页面加载后,我可以在日志记录中看到这些方法仍在运行并最终完成。

任何帮助将不胜感激。如果我遗漏了什么,我会很乐意尝试提供有关该问题的更多信息,因为我真的很感谢可能提供的任何帮助。

提前致谢

比尔

最佳答案

您应该通过扩展 java.util.concurrent.Executor 来实现您的并发类接口(interface)内置到 JavaSE 中,然后使用 Spring IoC container , 你可以注入(inject) WorkManagerTaskExecutor 的实现类在 Websphere 下运行时。

如果您想在另一个 Java 应用程序服务器上运行,这将为您提供灵 active ,如果您直接在 JVM 上的容器外运行,甚至可以工作,因为您可以注入(inject) ThreadPoolTaskExecutor而不必更改任何代码。

您应该避免直接针对 CommonJ WorkManager API (JSR 237) 进行编码,例如使用 waitForAll 方法,因为它仅适用于 IBM Websphere 和 Oracle WebLogic。

关于java - 使用 CommonJ WorkManagerTaskExecutor Spring 3 进行多线程处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10560028/

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