如何在 Java EE 上下文中合理延迟处理



在Java EE 5环境中,在继续处理我自己的数据之前,我无法确保另一个部分写入的某些数据存在。

从历史上看(J2EE 时间),它是通过在等待 500 毫秒后将要处理的数据对象放入内部 JMS 队列来完成的,例如通过 Thread.sleep 等待

但这感觉不是处理该问题的最佳方法,所以我有两个问题:

  1. 在 Java EE 上下文中使用 sleep 方法是否有任何问题?
  2. 在 Java EE 5 应用程序中延迟某些处理的合理解决方案是什么?

编辑:

我应该提到,我的处理是在通过 MDB 处理来自 JMS 队列的对象时进行的。

可能是这样,我等待的数据永远不会出现,所以必须有某种超时,之后我可以对我的数据进行一些特殊处理。

您可以使用 EJB TimerService 功能部件。应避免在托管环境中使用线程。

我同意关于计时器和避免JavaEE线程操作@dkaustubh。

另一种可能性是使用延迟传递的 JMS 队列。虽然它不是JavaEE API的一部分,但大多数消息传递系统供应商都支持它。检查这里。

我认为

,通过一些高级线程方法可以实现。除了考虑手动同步和线程管理之外,您始终可以使用Java Concurrent包。

未来可能是实现这一目标的方法之一。请参考 Java 并发包。

使用通知和Object#wait()/Object#notifyAll()即多线程,生产者通知消费者。

最新更新