java 自带 定时器Timer

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>








在Spring Boot中使用定时器可以使用Java自带定时器框架Timer,也可以使用Spring Boot提供的@Scheduled注解。 1. 使用Java Timer Java Timer是一个简单而轻量级的定时器框架,可以用于执行一些周期性或延迟性任务。 首先,在Spring Boot项目中添加Timer的依赖: ```xml <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.0</version> </dependency> ``` 然后在Java代码中创建一个Timer对象,并添加定时任务: ```java import java.util.Timer; import java.util.TimerTask; public class TimerDemo { public static void main(String[] args) { Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { System.out.println("任务执行了"); } }, 0, 1000); } } ``` 上述代码中,创建了一个Timer对象,并使用schedule方法添加了一个定时任务。其中,第一个参数是要执行的任务,第二个参数是任务延迟的时间(单位为毫秒),第三个参数是任务的周期(单位也是毫秒)。 2. 使用Spring Boot注解 在Spring Boot中,我们可以使用@Scheduled注解来实现定时任务的调度。首先在Spring Boot项目中添加如下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> ``` 然后在Java代码中添加@Scheduled注解,指定要执行的方法和执行的时间: ```java import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class ScheduledDemo { @Scheduled(cron = "0/1 * * * * ?") public void scheduledMethod() { System.out.println("任务执行了"); } } ``` 上述代码中,使用@Component注解将该类交给Spring管理,然后使用@Scheduled注解指定要执行的方法和执行的时间。其中,cron参数是一个表达式,指定任务的执行时间,这里的表达式表示每秒钟执行一次。 需要注意的是,使用@Scheduled注解需要在启动类上添加@EnableScheduling注解开启定时任务支持: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication @EnableScheduling public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 以上就是在Spring Boot中使用定时器的两种方式。具体使用哪种方式,可以根据实际情况选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值