从Javaservlet调用线程

从Javaservlet调用线程,java,servlets,thread-safety,Java,Servlets,Thread Safety,我正在开发一个应用程序,它使用servlet为最终用户使用的JSP获取和设置数据。所有数据在写入数据库之前或从数据库检索之后,都由处于会话状态的servlet进行操作 但其中一些数据库操作相当长,其中有大量IO正在进行,包括动态创建表或向表中插入数据以及从表中检索数据等。此过程还需要各种第三方产品,如Weka和Lucene;因此,处理器负载很大。我预计其中一些可能需要一到两分钟的时间,并在此时锁定会话 servlet通常在类中为这些操作调用静态方法,然后返回必要的数据类型。这就是我的问题;这是明

我正在开发一个应用程序,它使用servlet为最终用户使用的JSP获取和设置数据。所有数据在写入数据库之前或从数据库检索之后,都由处于会话状态的servlet进行操作

但其中一些数据库操作相当长,其中有大量IO正在进行,包括动态创建表或向表中插入数据以及从表中检索数据等。此过程还需要各种第三方产品,如Weka和Lucene;因此,处理器负载很大。我预计其中一些可能需要一到两分钟的时间,并在此时锁定会话

servlet通常在类中为这些操作调用静态方法,然后返回必要的数据类型。这就是我的问题;这是明智的还是将这些操作实现为直接从servlet调用的Java线程更好,还是我需要一个线程管理器?我是一个线程新手

servlet中的上述代码示例如下:

        // Create Data_Miner.
        Data_Miner dm = Data_Miner_ReaderWriter.write(activeUser.getUser(), rssfodm); 

        // Create output.
        if (rssfodm.getDataMinerOutputType() == Data_Miner_Output_Type.DECISION_TREE) {
            Decision_Tree dt = Decision_Tree_ReaderWriter.write(dm); 
这两个方法调用都是对类中的静态方法的调用,这些类包含读取/写入相关对象的方法

谢谢


摩根先生。

使用异步处理,以及回调处理程序和邮箱之类的东西,用户可以在准备好后返回并获取结果


既然您使用java,您也可以考虑使用JMS消息驱动POJO(Spring)或EJB(EJB标准)来接受对运行更长时间的事务的请求。长时间运行的进程不应该绑定到锁定资源的请求。我同意将长时间运行的作业绑定到servlet不是一个好主意,但这是我目前在dev中拥有的。因此,回调是一种需要研究的东西,或者可能通过quartz将作业提交到队列中,然后在末尾向用户发送电子邮件。电子邮件URL上写着“在此处获取结果”。这就像UPS包裹跟踪模型。如果对你有效,也许你可以接受答案。对你有好处,对我也有好处。