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

标签 java

大家好,我是论坛的新手,我只是有一个关于使用 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/

相关文章:

java - Spring MVC 相当于 .Net MVC LinkExtensions.ActionLink 方法

更改数据后,Java JTable repaint() 方法不起作用

java - 在 spring 应用程序中限制(减少)数据库插入速度

java - 在 Ebean 中创建嵌套对象的最简单方法是什么?

java - android - 全局布局刷新功能

java - Spring在运行时添加一些bean到服务上下文

java - Canvas 错误地绘制表 itext7 中的高度单元格

java - 在线程安全的 Spring Controller 中查找队列中有多少请求

java - 通过使用 eclipse 运行 .sh 文件来调试应用程序

java - 放入 JSON 对象中的变量