java timer 定时任务务为什么不用Timer

Java定时任务的简单实现 【转载】-春天的熊
Spring为我们提供了很方便的定时任务处理,但是不用Spring呢?JDK也给提供了一个简单的定时任务处理,废话不多说,贴上源码package com.yhj.timeT& xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" /&&import java.util.TimerT&import mon.date.DateU/**&* 要执行的定时任务&* com.yhj.timeTask.PrintTask.java&* @author 一线天色 天宇星辰 创建于
下午04:24:01&*/public class PrintTask extends TimerTask {&&&& @Override&&& public void run() {&&&&&& System.out.println(DateUtil.getCurrentChineseDate());&&& }&}package com.yhj.&import java.text.ParseEimport java.util.Dimport java.util.Timport java.util.TimerT&import mon.date.DateUimport com.yhj.timeTask.PrintTask;&/**&* 计时器&* com.yhj.timer.PrintTimer.java&* @author 一线天色 天宇星辰 创建于
下午04:24:49&*/public class PrintTimer {&&& /**&&& &* 计时器&&& &*/&&& private& Timer timer =new Timer();&&& /**&&& &* 每天执行一次&&& &* @param task&&& &* @param time 要求执行格式 hh:mn:ss&&& &* @author 一线天色 天宇星辰 创建于
下午04:28:11&&& &* @throws InterruptedException &&& &* @throws ParseException &&& &*/&&& public void doEveryDay(TimerTask task,String time) throws InterruptedException, ParseException {&&&&&& time=DateUtil.getCurrentDateStr().substring(0,11)+&&&&&& long pare(new Date(), DateUtil.praseDate(time), DateUtil.ONE_MILLI_SECOND);&&&&&& Thread.sleep(Math.abs(milliSeconds));&&&&&& timer.scheduleAtFixedRate(task,new Date(), DateUtil.ONE_DAY);&&& }&&& /**&&& &* 在某个时间点执行一次&&& &* @param task&&& &* @param date&&& &* @author 一线天色 天宇星辰 创建于
下午04:29:29&&& &*/&&& public void doOnce(TimerTask task,Date date) {&&&&&& timer.schedule(task, date);&&& }&&& /**&&& &* 每隔多长时间执行一次&&& &* @param task&&& &* @param milliSeconds&&& &* @author 一线天色 天宇星辰 创建于
下午04:53:54&&& &*/&&& public void doWithRepeat(TimerTask task,long milliSeconds) {&&&&&& timer.scheduleAtFixedRate(task,0, milliSeconds);&&& }&}package com.yhj.&import com.yhj.timeTask.PrintTimport com.yhj.timer.PrintT&public class Clint {&&&& /**&&& &* @param args&&& &* @author 一线天色 天宇星辰 创建于
下午04:55:19&&& &*/&&& public static void main(String[] args) {&&&&&& new PrintTimer().doWithRepeat(new PrintTask(), 1000);&&&& }&}对于该调用哪个方法呢?参见JDK(如下)方法摘要&void() &&&&&&&&&&终止此计时器,丢弃所有当前已安排的任务。&int() &&&&&&&&&&从此计时器的任务队列中移除所有已取消的任务。&void(&task, &time) &&&&&&&&&&安排在指定的时间执行指定的任务。&void(&task, &firstTime, long&period) &&&&&&&&&&安排指定的任务在指定的时间开始进行重复的固定延迟执行。&void(&task, long&delay) &&&&&&&&&&安排在指定延迟后执行指定的任务。&void(&task, long&delay, long&period) &&&&&&&&&&安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。&void(&task, &firstTime, long&period) &&&&&&&&&&安排指定的任务在指定的时间开始进行重复的固定速率执行。&void(&task, long&delay, long&period) &&&&&&&&&&安排指定的任务在指定的延迟后开始进行重复的固定速率执行。&下面是我的程序的运行结果,如图所示,一个1秒执行一次的定时任务就搞定了,简单吧?(当然最好还是用框架里面提供的定时任务处理方法)&
很喜欢此文字
转载了此文字
坚信上帝的延迟,并不是上帝的拒绝。
那些还没有到来的,总会在找寻和尝试中来到。
Here,成长的角落。
&&&|&Powered byJava基础--定时任务Timer - 停留的风 - 博客园
posts - 230, comments - 1185, trackbacks - 5, articles - 27
Java基础--定时任务Timer
一、Timer介绍
&java.util.Timer
&java.util.TimerTask
Timer是一个定时器类,通过该类可以为指定的定时任务进行配置。TimerTask类是一个定时任务类,该类实现了Runnable接口,而且是一个抽象类,如下所示:
  public abstract class TimerTask implements Runnable
  可以通过继承该类,来实现自己的定时任务。
  Timer定时器实例有多种构造方法:
  Timer()
  创建一个新计时器。
  Timer(boolean isDaemon)
  创建一个新计时器,可以指定其相关的线程作为守护程序运行。
  Timer(String name)
  创建一个新计时器,其相关的线程具有指定的名称。
  Timer(String name, boolean isDaemon)
  创建一个新计时器,其相关的线程具有指定的名称,并且可以指定作为守护程序运行。
二、Timer方法
定时执行方法
1、在特定时间执行任务,只执行一次
public void schedule(TimerTask task,Date time)
2、在特定时间之后执行任务,只执行一次
public void schedule(TimerTask task,long delay)
3、指定第一次执行的时间,然后按照间隔时间,重复执行
public void schedule(TimerTask task,Date firstTime,long period)
4、在特定延迟之后第一次执行,然后按照间隔时间,重复执行
public void schedule(TimerTask task,long delay,long period)
delay: 延迟执行的毫秒数,即在delay毫秒之后第一次执行
period:重复执行的时间间隔
5、第一次执行之后,特定频率执行,与3同
public void scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
6、在delay毫秒之后第一次执行,后按照特定频率执行
public void scheduleAtFixedRate(TimerTask task,long delay,long period)
方法名称schedule()和scheduleAtFixedRate()两者的区别
&1&schedule()方法更注重保持间隔时间的稳定:保障每隔period时间可调用一次&2&scheduleAtFixedRate()方法更注重保持执行频率的稳定:保障多次调用的频率趋近于period时间,如果任务执行时间大于period,会在任务执行之后马上执行下一次任务
timer.cancel();
1、特定时间后执行
public void schedule(TimerTask task,long delay)
task为:执行任务
delay:时间毫秒数
方法的含义:
在delay毫秒后执行任务task,只执行一次。
1分钟后同步数据。
同步任务:
package com.
import java.util.TimerT
public class SynchroTimerTask extends TimerTask {
public void run() {
// TODO Auto-generated method stub
System.out.println("Synchro data to other servers.");
定时任务:
package com.
import java.util.T
import java.util.TimerT
public class SynchroTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
TimerTask task = new SynchroTimerTask();
Timer timer = new Timer();
timer.schedule(task, 1000);
&2、案例2:按点吃饭
首先定义吃饭的任务,制定饭点,没小时进行检查,到点就吃饭。
package com.
import java.util.ArrayL
import java.util.C
import java.util.L
import java.util.TimerT
* 定时吃饭
public class EatTimerTask extends TimerTask {
//吃饭时间
private static List&Integer& eatT
* 静态初始化
initEatTimes();
* 初始化吃饭时间
private static void initEatTimes(){
eatTimes = new ArrayList&Integer&();
eatTimes.add(8);
eatTimes.add(12);
eatTimes.add(18);
public void run() {
// TODO Auto-generated method stub
Calendar calendar = Calendar.getInstance();
System.out.println("检查是否到了吃饭的点");
int hour = calendar.get(Calendar.HOUR_OF_DAY);
if(eatTimes.contains(hour))
System.out.println("饿了,吃饭...");
定时检查执行:
package com.
import java.util.C
import java.util.D
import java.util.T
import java.util.TimerT
public class EatTimerTaskTest {
public static void main(String[] arg){
TimerTask task = new EatTimerTask();
calendar= Calendar.getInstance();
Date firstTime = calendar.getTime();
//间隔:1小时
long period = 1000 * 60 * 60;
//测试时间每分钟一次
//period = 1000 * 60;
Timer timer = new Timer();
timer.schedule(task, firstTime, period);Java&定时器的使用:每天定时执行任务
import java.util.C
import java.util.D
import java.util.T
import java.util.TimerT
public class TestTimer {
& & static int count =
& & public static void
showTimer() {
& TimerTask task = new TimerTask() {
& & & public
void run() {
& & System.out.println("时间=" +
new Date() + " 执行了" + count + "次"); // 1次
& //设置执行时间
& Calendar calendar =
Calendar.getInstance();
& int year = calendar.get(Calendar.YEAR);
& int month = calendar.get(Calendar.MONTH);
& int day =
calendar.get(Calendar.DAY_OF_MONTH);//每天
& //定制每天的21:09:00执行,
& calendar.set(year, month, day, 21, 9, 00);
& Date date = calendar.getTime();
& Timer timer = new Timer();
& System.out.println(date);
& int period = 2 * 1000;
& //每天的date时刻执行task,每隔2秒重复执行
& timer.schedule(task, date, period);
& //每天的date时刻执行task, 仅执行一次
& //timer.schedule(task, date);
& & public static void
main(String[] args) {
& showTimer();
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。android(102)
java(27)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:543179次
积分:6271
积分:6271
排名:第2445名
原创:137篇
转载:36篇
评论:107条
(2)(4)(4)(3)(8)(4)(1)(2)(3)(1)(2)(6)(1)(8)(5)(9)(20)(12)(11)(4)(1)(7)(30)(11)(8)(9)}

我要回帖

更多关于 c 定时器 timer 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信