JAVA里面有时候需要定期地处理某些任务,例如:定期地查询数据库提取数据;定期地清理超时数据;定期地将内存中数据存到数据库。
一种方法是自己写线程,自己控制。另一种方法就是利用java.util.Timer 和 java.util.TimerTask 来实现。
下面就以一个将队列中数据定期存入数据库的例子展示这种用法:
import java.util.TimerTask;
import java.util.Timer;
public class Myservice{
private Queue<String> logs = new LinkedBlockingQueue<String>(10000);
private DBProvider provider;
private Timer timer;
private LogToDbTask task;
private final long interval = 60 * 1000;
public Myservice(){
provider= new DBProvider();
timer= new Timer();
}
private void saveToDb(){
String logstr=null;
boolean suc=false;
for(int i=0;i<100 && !logs.isEmpty();i++){
logstr=logs.poll();
if(logstr!=null){
suc=provider.save(logstr);
if(!suc){
logs.add(logstr);
}
}
}
}
private class LogToDbTask extends TimerTask{
public void run(){
saveToDb();
}
}
public void start(){
task = new LogToDbTask();
timer.schedule(task,interval,interval);
}
public void main(String args[]){
Myservice service = new Myservice();
service.start();
}
}