在Java EE 5环境中,在继续处理我自己的数据之前,我无法确保另一个部分写入的某些数据存在。
从历史上看(J2EE 时间),它是通过在等待 500 毫秒后将要处理的数据对象放入内部 JMS 队列来完成的,例如通过 Thread.sleep 等待
。但这感觉不是处理该问题的最佳方法,所以我有两个问题:
- 在 Java EE 上下文中使用 sleep 方法是否有任何问题?
- 在 Java EE 5 应用程序中延迟某些处理的合理解决方案是什么?
编辑:
我应该提到,我的处理是在通过 MDB 处理来自 JMS 队列的对象时进行的。
可能是这样,我等待的数据永远不会出现,所以必须有某种超时,之后我可以对我的数据进行一些特殊处理。
您可以使用 EJB TimerService 功能部件。应避免在托管环境中使用线程。
我同意关于计时器和避免JavaEE线程操作@dkaustubh。
另一种可能性是使用延迟传递的 JMS 队列。虽然它不是JavaEE API的一部分,但大多数消息传递系统供应商都支持它。检查这里。
,通过一些高级线程方法可以实现。除了考虑手动同步和线程管理之外,您始终可以使用Java Concurrent
包。
未来可能是实现这一目标的方法之一。请参考 Java 并发包。
使用通知和Object#wait()
/Object#notifyAll()
即多线程,生产者通知消费者。