tomcat启动时启动额外线程并控制线程状态

通过启动线程可以进行后台的操作

1.创建servlet

package com.wuhao.itinfo.action;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.*;

public class GrabBlogHtmlAction extends HttpServlet {
    /**
     * function:control thread state
     * 
	 * @author wuhao
	 */
	private static final long serialVersionUID = 1L;
	
	private GrabBlogThread gbt;
	private String method;
	
	@Override
	public void init() throws ServletException {
		gbt = new GrabBlogThread();
		gbt.start();
	}

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//get start or stop thread
		method = (String) request.getParameter("method");
		
		if("stop".equals(method)){
			//stop thread
			if(gbt != null){
				gbt.stopThread();
				gbt = null;
				System.gc();
				System.out.println("stop thread");
			}
		}else if("start".equals(method)){
			System.out.println("start thread" + gbt);
			//start thread
			if(gbt == null || !gbt.isAlive()){
				gbt = new GrabBlogThread();
				gbt.start();
			}
			System.out.println("start thread");
		}else{
			System.out.println("nothing to do");
		}
	}
	
	/***
	 * 
	 * */
	class GrabBlogThread extends Thread 
    {
		//thread stop sign
		private volatile boolean stopSign = true;
		
		//stop thread
		public void stopThread(){
			stopSign = false;
		}
		public void startThread(){
			stopSign = true;
		}
		
		@Override
		public void run() {
	          while(stopSign){
             	 System.out.println("thread run: " + stopSign);
             	 try {
					sleep(10000);
				 } catch (InterruptedException e) {
					e.printStackTrace();
				 }
              }
		}	
    } 

}



2.配置web.xml
	<!-- GRAB HTML -->
	<servlet>
	    <servlet-name>GRABHTML</servlet-name>
	    <servlet-class>com.wuhao.itinfo.action.GrabBlogHtmlAction</servlet-class>
	    <load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>   
  		<servlet-name>GRABHTML</servlet-name>   
 		 <url-pattern>/grabblogaction</url-pattern>   
	</servlet-mapping>
	<!-- GRAB HTML -->

3.测试
启动tomcat:
thread run: true
thread run: true

停止线程:
http://localhost:8080/itinfo/grabblogaction?method=stop
thread run: true
thread run: true
stop thread

启动线程:
http://localhost:8080/itinfo/grabblogaction?method=start

thread run: true
stop thread
start threadnull
start thread
thread run: true
thread run: true

你可能感兴趣的:(tomcat)