java定时任务学习:Timer和TimerTask
2014-07-22 15:59
411 查看
一、Timer和TimerTask的概述,摘自:http://2711082222.blog.163.com/blog/static/1063022492012222291064/
Timer是一个普通的类,其中有几个重要的方法;而TimerTask则是一个抽象类,其中有一个抽象方法run(),类型线程中的run()方法。我们使用Timer创建一个他的对象,然后使用这对象的schedule方法来完成这种间隔的操作。schedule方法有三个参数,其中第一个参数就是TimerTask类型的对象,我们实现TimerTask的run()方法就是要周期执行的一个任务;第二个参数有两种类型,第一种是long类型,表示多长时间后开始执行,另一种是Date类型,表示从那个时间后开始执行;而第三个参数就是执行的周期,为long类型。schedule方法还有一种两个参数的执行重载,第一个参数仍然是TimerTask,第二个表示为long的形式表示多长时间后执行一次,为Date就表示某个时间后执行一次。需要注意的是Timer就是一个线程,使用schedule方法完成对TimerTask的调度,多个TimerTask可以共用一个Timer,也就是说Timer对象调用一次schedule方法就是创建了一个线程,并且调用一次schedule后TimerTask是无限制的循环下去的,使用Timer的cancel()停止操作。当然同一个Timer执行一次cancel()方法后,所有Timer线程都被终止。
二、实现定时任务的方法:
1、用监听器的方式启动定时任务: 主要摘自http://www.open-open.com/lib/view/open1338175095183.htmla、先编写工作类:
public class TimerTaskDemo extends TimerTask { @Override public void run() { System.out.println("call at"+new Date()); } }
b、调度类:
public class TimerManager { private Timer timer = null; private static final long PERIOD_DAY = 24 * 60 * 60 * 1000; public TimerManager() { timer = new Timer(); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 14); calendar.set(Calendar.MINUTE, 56); calendar.set(Calendar.SECOND, 0); Date date = calendar.getTime(); System.out.println("now time is "+date); //如果第一次执行定时任务的时间 小于 当前的时间 //此时要在 第一次执行定时任务的时间 加 10s,以便此任务在下个时间点执行。如果不加10s,任务会立即执行 if (date.before(new Date())) { date = this.addDay(date, 10); } TimerTaskDemo demo = new TimerTaskDemo(); timer.schedule(demo,date, 10000); } // 增加或减少天数 public Date addDay(Date date, int num) { Calendar startDT = Calendar.getInstance(); startDT.setTime(date); startDT.add(Calendar.SECOND, num); return startDT.getTime(); } public void endtime(){ timer.cancel(); } }
c、监听类:
public class TimerTaskListener implements ServletContextListener { private TimerManager tm = null; @Override public void contextDestroyed(ServletContextEvent arg0) { tm.endtime(); } @Override public void contextInitialized(ServletContextEvent arg0) { tm = new TimerManager(); } }
d、加载监听器:web.xml中
<listener> <listener-class> com.test2.timerListener.TimerTaskListener </listener-class> </listener>
e、发布启动服务,就行.
2、用servlet方式启动自动任务(不细写):摘自http://my.oschina.net/odysuess/blog/64496
a、创建servlet:
public class StartUpServlet extends HttpServlet { public StartUpServlet() { super(); } public void destroy() { super.destroy(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } public void init() throws ServletException { TimerManager tm = new TimerManager(); System.out.println("this is in SERVLET"); } }
b、配置web.xml
<servlet> <servlet-name>StartUpServlet</servlet-name> <servlet-class>com.test2.servlet.StartUpServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>StartUpServlet</servlet-name> <url-pattern>/StartUpServlet</url-pattern> </servlet-mapping>
c、发布。启动。
相关文章推荐
- 定时任务:Java中Timer和TimerTask的使用
- 定时任务:Java中Timer和TimerTask的使用
- 【Java】利用Timer与TimerTask定时执行任务
- 定时任务:Java中Timer和TimerTask的使用
- 定时任务:Java中Timer和TimerTask的使用
- 定时任务:Java中Timer和TimerTask的使用
- 定时任务 java.util.Timer和TimerTask
- 定时任务:Java中Timer和TimerTask的使用
- 【整理】定时任务:Java中Timer和TimerTask的使用
- 定时任务:Java中Timer和TimerTask的使用
- 定时任务:Java中Timer和TimerTask的使用
- 【定时任务:Java中Timer和TimerTask的使用】
- 定时任务:Java中Timer和TimerTask的使用
- 定时任务:Java中Timer和TimerTask的使用
- 定时任务:Java中Timer和TimerTask的使用
- 定时任务:Java中Timer和TimerTask的使用
- 定时任务:Java中Timer和TimerTask的使用
- 定时任务:Java中Timer和TimerTask的使用
- java定时任务--Timer、TimerTask
- 定时任务:Java中Timer和TimerTask的使用