Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何独立地处理来自Servlet的数据?_Java_Servlets_Queue_Spring_Ejb_Jms - Fatal编程技术网

Java 如何独立地处理来自Servlet的数据?

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); } 显然,我没有一个主课来做这个。我如何创

我制定了以下计划/架构:

A) Java servlet接收POST请求,从POST请求获取参数,并将其存储在公共静态LinkedList中:

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);
    }