Servlet 后台线程启动

刚开始学java,做javaweb开发,想在后台服务开启时候后台跑一个线程做些清理工作,到网上看了几篇博客,自己整了整,写出点东西来。现在用博客记录下来。

java开发新手,欢迎吐槽。


以下demo写的是在服务启动的时候,给servletContext中的一个list集合添加数据。当然,这个集合不是线程安全的,只是简单的demo。


代码如下:


package com.test.servlet;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class StartThreadListener implements ServletContextListener {

	private MyThread myThread = null;
	
	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		System.out.println("end-----------");
		if (myThread != null && myThread.isInterrupted()) {  
            myThread.interrupt(); 
        } 
		
	}

	@Override
	public void contextInitialized(ServletContextEvent event) {
		ServletContext context = event.getServletContext();
		List<String> list = new ArrayList<String>();
		context.setAttribute("token", list);

		System.out.println("start-----------");
        if (myThread == null) {  
            myThread = new MyThread(context);  
        }
        myThread.start(); // servlet 上下文初始化时启动  
		
	}

}

//自定义线程
class MyThread extends Thread{

	private ServletContext context = null;
	
	public MyThread(ServletContext context) {
		super();
		this.context = context;
	}


	@Override
	public void run() {
		while (!this.isInterrupted()) {// 线程未中断执行循环  
            try {  
            	@SuppressWarnings("unchecked")
				List<String> list = (List<String>) this.context.getAttribute("token");
            	list.add("abcd");
            	System.out.println(list);
            	System.out.println("list size = "+list.size());
                Thread.sleep(4000); //每隔2000ms执行一次  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            }
        }  
	}
	
}


然后再web.xml中配置如下:

<listener>  
    <listener-class>com.test.servlet.StartThreadListener</listener-class>  
</listener>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值