Servlet 后台线程启动,servlet后台线程
分享于 点击 44706 次 点评:232
Servlet 后台线程启动,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>
相关文章
- 暂无相关文章
用户点评