用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()));
	}

}



别忘了在web.xml中配置
	<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);
	}

当然时间也可以自己设置。

你可能感兴趣的:(用ScheduledThreadPoolExecutor啊!谁尼玛用坑爹的Timer啊!)