首先后台有一个Thread,其中的run方法是无限循环的,我想用jsp通过提交form控制线程的开与关,但现在servlet里调用thread.start()方法后就关不掉了,原因好像是当再次提交表单的时候程序去关就是另外一个Thread了,请问怎么能够实现通过提交Form表单控制后天线程开关的问题?Servlet里的程序大致如下:String ctrl_task = request.getParameter("thread");//form里是一个radio,执行的value=run,关闭的value=close
Thread01 th = new Thread01();//Thread01里的run方法就是一个无限打印的死循环if (ctrl_task.equals("run")) {
    response.sendRedirect("/test/form.jsp");//跳转回提交参数的界面
    th.start();
} else if (ctrl_task.equals("close")) {
    th.interrupt();//或用stop()方法
     response.sendRedirect("/test/form.jsp");
}多谢!!!

解决方案 »

  1.   

    把线程对象放到Application里
    在servlet 中取出操作就ok了 
    建议写一个线程的管理类
    在servlet里面调用就好了
    一个servlet 执行完毕后就被销毁了
      

  2.   

    多谢了!我把线程放到Servlet的init方法里初始化了,

    public void init() throws ServletException {

    Thread01 th01 = new Thread01();
    Thread th = new Thread(th01);
    getServletContext().setAttribute("the_thread", th);
    }在web.xml里添加了一条数据<load-on-startup>1</load-on-startup>
    即:
    <servlet>
        <description>This is the description of my J2EE component</description>
        <display-name>This is the display name of my J2EE component</display-name>
        <servlet-name>RunServlet</servlet-name>
        <servlet-class>com.cn.servlet.RunServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>  <servlet-mapping>
        <servlet-name>RunServlet</servlet-name>
        <url-pattern>/servlet/RunServlet</url-pattern>
      </servlet-mapping>现在可以确保开和关的线程为同一个线程,但是关掉之后线程就死掉了,不能再次开启,我再考虑用wait和notify试试,谢了啊!
    (没想到用jsp实现的一个小开关竟然这么难,是不是不应该用线程实现?有没有别的更好的办法?)
      

  3.   

    思路不好吧
    不是去关掉线程,而是用变量告诉线程是不是去做事
    run(){
    while(isRunning){
    if(toDo){
    //do something
    }
    sleep(xxx);
    }
    }