Java 如何独立地处理来自Servlet的数据?
我制定了以下计划/架构: A) Java servlet接收POST请求,从POST请求获取参数,并将其存储在公共静态LinkedList中:Java 如何独立地处理来自Servlet的数据?,java,servlets,queue,spring,ejb,jms,Java,Servlets,Queue,Spring,Ejb,Jms,我制定了以下计划/架构: A) Java servlet接收POST请求,从POST请求获取参数,并将其存储在公共静态LinkedList中: public static LinkedList incomingQueue = new LinkedList<myObjects>(); 现在,我想定期访问队列并对对象执行处理: while(true){ doProcessing(incomingQueue); wait(someTime); } 显然,我没有一个主课来做这个。我如何创
public static LinkedList incomingQueue = new LinkedList<myObjects>();
现在,我想定期访问队列并对对象执行处理:
while(true){
doProcessing(incomingQueue);
wait(someTime);
}
显然,我没有一个主课来做这个。我如何创建这样一个类,它可以访问incomingQueue而不被servlet触发?正确的体系结构是什么
谢谢您的时间。您有几种选择:
web.xml
添加一个侦听器,该侦听器扩展并启动contextInitialized()
上的单独线程另外:请注意@BrianRoach的评论。关于同步列表的要点是相当重要的。 < P>首先,队列应该放在servlet上下文属性中(参见:)。对这个队列的访问必须同步,考虑。 在普通servlet中,可以通过在
contextInitialized()
中启动线程并在contextdestromed
中中断线程来使用
如果正在使用,则可以在:TimerService
或中使用
最后是标准Java中的一个类。最后但并非最不重要的一点是,在您的情况下,它可能是一个更好的选择。您需要同步方法以进行并发访问 一个非常核心的解决方案是像生产者和消费者一样实现它。这是一个使用堆栈和1生产者和3消费者的示例
更简洁的解决方案是使用。忽略您正在使用的非同步LinkedList对并发访问不安全这一事实,您需要创建一个在后台运行的线程并处理它。
while(true){
doProcessing(incomingQueue);
wait(someTime);
}