将Session参数传递给Thread

时间:2015-10-03 09:36:34

标签: java multithreading servlets

一旦用户点击提交按钮
,我想在Servlet中的Web项目中同时执行两项任务 1.运行代码以触发一些后端活动
2.向用户显示网页。
我尝试使用代码示例here

由于我设置的会话属性很少,我需要在其中一个线程中设置它。我尝试将第一点放在一个线程中并在第二点指向两个但是变量没有从doPost()方法解析到线程。

Servlet:

public class JOBRUN extends HttpServlet{
protected void doGet(HttpServletRequest request, HttpServletResponse     response) throws ServletException, IOException {
     AESASNewOpenPeriod=request.getParameter("AESASNewOpenPeriod");
     ScriptRunOption = Integer.parseInt(request.getParameter("AESASJOBRUNOPTION"));
     HttpSession session=request.getSession();
     String Stream="aaaa";
     session.setAttribute("AEStream", Stream);
     //Do Job 1 (Update table)
     //Do Job 2 (Display webpage to user)
        }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    doGet(request, response);

}

1 个答案:

答案 0 :(得分:1)

您可以创建一个匿名线程(如果您不想要专用的Thread类)作业1。

new Thread(new Runnable() {
    Session localSession = session;// assign the session object to thread variable.
    public void run() {
        // you can access localSession here. and do the JOB 1
    }
}).start();// this will run asynchrously(non blocking).

此外,如果您只想传递一些属性来执行作业1(即,如果您不想更改会话,则可以),您只能传递相关属性。例如

String threadStream = session.setAttribute("AEStream");//local memeber variable  inside anonymous thread

然后从线程后的下一行开始,你可以做Job 2.

注意:如果你的意思是其他东西 - 运行一个带有请求的asychrounous工作线程,你就可以开始使用Servlet 3.x AsyncContext