Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2534313
  • 博文数量: 245
  • 博客积分: 4125
  • 博客等级: 上校
  • 技术积分: 3113
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-25 23:56
文章分类

全部博文(245)

文章存档

2015年(2)

2014年(26)

2013年(41)

2012年(40)

2011年(134)

2010年(2)

分类: Java

2013-01-07 22:17:10

如果你希望在war包部署(启动)的时候,启动一个线程,有以下两种方法:

第一种方法:使用ServletContextListener,具体如下:

ServletContextListener使用方法,参考:

web.xml中添加以下行


  1. com.mypackage.MyServletContextListener
下面是一个例子:


  1. public class MyServletContextListener implements ServletContextListener {

  2.     private MyThreadClass myThread = null;

  3.     public void contextInitialized(ServletContextEvent sce) {
  4.         if ((myThread == null) || (!myThread.isAlive())) {
  5.             myThread = new MyThreadClass();
  6.             myThread.start();
  7.         }
  8.     }

  9.     public void contextDestroyed(ServletContextEvent sce){
  10.         try {
  11.             myThread.doShutdown();
  12.             myThread.interrupt();
  13.         } catch (Exception ex) {
  14.         }
  15.     }
  16. }
第二种方法:在Servlet的init()方法中创建线程,具体例子:

web.xml中添加以下行:特别需要注意的是设置load-on-startup为1,使得MyServlet可以在war部署时就加载


  1. MyServlet
  2. MyServlet
  3. com.test.MyServlet
  4. 1
Servlet中init方法例子:


  1. // This Happens Once and is Reused
  2. public void init() throws ServletException {
  3. super.init();
  4. //start debugger in a new thread
  5. Thread thread = new Thread(new Runnable() {
  6. public void run() {
  7. try {
  8. System.out.println("do anything you like...");
  9. } catch (Exception e) {
  10. e.printStackTrace();
  11. }
  12. System.out.print("debugger started.#");
  13. }
  14. });
  15. thread.start();
  16. }



阅读(5551) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~