天天看點

javaweb線程和java定時器

聲明:本文章僅基于個人粗略整理總結,如有不足之處,歡迎指出。

+++++++++++++++++++++++++++

1、當啟動web時就開啟線程。

在web.xml裡添加:

<!-- 線程:完整包名+類名 -->
<listener>
	   <listener-class>com.irs.util.protocol.TimerUtilPolice</listener-class>
</listener> 
           

實作類:

public class TimerUtilPolice implements ServletContextListener {
	
	private PoliceRecordService policeRecordService;
 @Override  
    public void contextInitialized(ServletContextEvent arg0)  {  
    	policeRecordService=new PoliceRecordService();//執行個體化
        final long timeInterval =1000*6;//線程時間
 Runnable runnable = new Runnable() {  
    	  public void run() {
    	                  while (true) {  
               long l = System.currentTimeMillis();
                Date date = new Date(l);
                SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");
                System.out.println(dateFormat.format(date));
                policeRecordService.insPoliceRecordSet();
                try {  
                    Thread.sleep(timeInterval);  
                } catch (InterruptedException e) {  
                    e.printStackTrace();  
                }  
            }
    	    }
        };  
        Thread thread = new Thread(runnable);  

    	thread.start();
}

  
    @Override  
    public void contextDestroyed(ServletContextEvent arg0) {  
        // TODO Auto-generated method stub  
          
    }        
           

2、為減少記憶體損耗,可用定時器代替普通線程。原則上定時器也是啟動線程,但定時器的可以指定第一次啟動的延遲時間,不但啟動可以控制,取消也是可控的。

​
package com.irs.util.protocol;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

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

import com.irs.service.police.PoliceRecordService;

public class TimerUtilPolice implements ServletContextListener {

	 TimerTask task = new TimerTask() {  
         @Override  
         public void run() { //任務 
        	 long l = System.currentTimeMillis();
             Date date = new Date(l);
             SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
             System.out.println(dateFormat.format(date));
         }  
     };  
    	 
    @Override  
    public void contextInitialized(ServletContextEvent arg0)  {  
    	policeRecordService=new PoliceRecordService();

      final long timeInterval =1000*6;//機關毫秒  
      Timer timer = new Timer();  
    
// 第二個參數為首次執行的延時時間,第三個參數為定時執行的間隔時間,第四個參數為時間機關秒 
      timer.scheduleAtFixedRate(task, 1, timeInterval,TimeUnit.SECONDS); 
     

    }      
    
    @Override  
    public void contextDestroyed(ServletContextEvent arg0) {  
        // TODO Auto-generated method stub  
          
    }        

}

​
           

常用時間機關包含:

TimeUnit.DAYS          //天

TimeUnit.HOURS         //時

TimeUnit.MINUTES       //分

TimeUnit.SECONDS       //秒

TimeUnit.MILLISECONDS  //毫秒 

在Time類和TimerTask類中都有一個cancel()方法.

 TimerTask類中的作用是:将自身從任務隊列中清除,(一個Timer對象可以執行多個Timertask任務)

 Timer類中的作用是:将任務隊列中的全部任務清空.