用ScheduledThreadPoolExecutor啊!谁尼玛用坑爹的Timer啊!



import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

public class BatchServlet extends HttpServlet {

private static final long serialVersionUID = -2612870262013503659L;
private ScheduledThreadPoolExecutor a = new ScheduledThreadPoolExecutor(1);

@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
super.init();
System.out.println("init");
Runnable command = new Runnable() {
public void run() {
printOK();
}
};

try {
a.scheduleAtFixedRate(command, calculateStartTime(), 24 * 60 * 60,
TimeUnit.SECONDS);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

@Override
public void destroy() {
// TODO Auto-generated method stub
super.destroy();
System.out.println("destroy");
a.shutdownNow();
}

private static long calculateStartTime() throws ParseException {

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
long targetLongTime = calendar.getTimeInMillis();
long currentLongTime = System.currentTimeMillis();
System.out.println(targetLongTime);
if (targetLongTime < currentLongTime) {
targetLongTime += 24 * 60 * 60 * 1000;
}
System.out.println(targetLongTime - currentLongTime);
return (targetLongTime - currentLongTime) / 1000;

}

private static void printOK() {
System.out.println("ok");
System.out.println(new SimpleDateFormat("HHmmss").format(new Date()));
}

}



[color=red]别忘了在web.xml中配置[/color]

<servlet>
<servlet-name>BatchServlet</servlet-name>
<servlet-class>
包名
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>


Okay,好吧,Timer也挺好用的。


private void printOK() {
System.out.println("OK");
}

public void testTimer() {
Timer t = new Timer();
TimerTask tt = new TimerTask() {

@Override
public void run() {
printOK();
}
};
Date date = new Date();
t.schedule(tt, date, 1000);
}

当然时间也可以自己设置。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值