聲明:本文章僅基于個人粗略整理總結,如有不足之處,歡迎指出。
+++++++++++++++++++++++++++
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類中的作用是:将任務隊列中的全部任務清空.