您的位置:首页 > 编程语言 > Java开发

java 自带 定时器Timer

2013-08-06 18:52 253 查看
package com.TestTime;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Timer;

public class  Time extends Timer {
private Time(){};
private Time(String name ){};
public static void main(String []args){
Time t=new Time();//创建一个新计时器。
Time t1=new Time("name1");//创建一个新计时器,其相关的线程具有指定的名称。
Calendar cal = new  GregorianCalendar(2013, 07, 06,18,38,0);
/*这个是设置开始时间
year - 用来在日历中设置 YEAR 日历字段的值。
month - 用来在日历中设置 MONTH 日历字段的值。Month 值是基于 0 的,例如,0 表示 1 月。
dayOfMonth - 用来在日历中设置 DAY_OF_MONTH 日历字段的值。
hourOfDay - 用来在日历中设置 HOUR_OF_DAY 日历字段的值。
minute - 用来在日历中设置 MINUTE 日历字段的值。
second - 用来在日历中设置 SECOND 日历字段的值。*/
Date d=null;
try {
d = cal.getTime();
System.out.println(d.getTime());
} catch (Exception e) {
e.printStackTrace();
}
t.scheduleAtFixedRate(new Job(), d, 1000);//定时器从 2013年8月6号 18时 38分钟后 每分钟执行一次
t.scheduleAtFixedRate(new Job("job1"), 1000, 3000);//定时器1秒后  每3秒钟执行一次
}
}


package com.TestTime;

import java.util.Date;
import java.util.TimerTask;
/**
* 定时器测试类
* @author Administrator
*
*/
public class Job extends TimerTask{
String name ="";
//设置构造函数是为了便于执行某个方法
public Job(){};
public Job(String Jobname){
this.name=Jobname;
};
@Override
public void run() {
if(name.equals("job1")){
test1();
}else {
test2();
}
}

/**
* 测试方法一
*/
public void test1(){
Date d=new Date();
System.out.println("这个是定时器job1--"+d.getMinutes());
}
/**
* 测试方法二
*/
public void test2(){
Date d=new Date();
System.out.println("这个是定时器"+d.getMinutes());
}

}


如果想在服务启动后运行定时器

package com.accp;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class  Time extends Timer implements ServletContextListener {
public  Time(){};
public  Time(String name ){}
Time t=null;
Time t1=null;
public void contextDestroyed(ServletContextEvent event) {
t.cancel();
// TODO Auto-generated method stub
event.getServletContext().log("销毁方法");
}
public void contextInitialized(ServletContextEvent event) {
// TODO Auto-generated method stub

event.getServletContext().log("定时器启动");
t=new Time();//创建一个新计时器。
Time t1=new Time("name1");//创建一个新计时器,其相关的线程具有指定的名称。
Calendar cal = new  GregorianCalendar(2013, 07, 07,21,16,0);
/*这个是设置开始时间
year - 用来在日历中设置 YEAR 日历字段的值。
month - 用来在日历中设置 MONTH 日历字段的值。Month 值是基于 0 的,例如,0 表示 1 月。
dayOfMonth - 用来在日历中设置 DAY_OF_MONTH 日历字段的值。
hourOfDay - 用来在日历中设置 HOUR_OF_DAY 日历字段的值。
minute - 用来在日历中设置 MINUTE 日历字段的值。
second - 用来在日历中设置 SECOND 日历字段的值。*/
Date d=null;
try {
d = cal.getTime();
System.out.println(d.getTime());
} catch (Exception e) {
e.printStackTrace();
}
t.scheduleAtFixedRate(new Job(), d, 1000);//定时器从 2013年8月7号 21时 16分钟后 每分钟执行一次
t.scheduleAtFixedRate(new Job("job1"), 1000, 3000);//定时器1秒后  每3秒钟执行一次
}

}

package com.accp;
import java.util.Date;
import java.util.TimerTask;
public class Job  extends TimerTask {

String name ="";
//设置构造函数是为了便于执行某个方法
public Job(){};
public Job(String Jobname){
this.name=Jobname;
};
@Override
public void run() {
if(name.equals("job1")){
test1();
}else {
test2();
}
}

/**
* 测试方法一
*/
public void test1(){
Date d=new Date();
System.out.println("这个是定时器job1--"+d.getMinutes());
}
/**
* 测试方法二
*/
public void test2(){
Date d=new Date();
System.out.println("这个是定时器"+d.getMinutes());
}
}

web.xml 中配置

<listener>
<listener-class>com.accp.Time</listener-class>
</listener>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java定时器Timer