Java实现定时任务的多种方式

Java实现定时任务的多种方式

1、Thread类中Thread.sleep(1000);   //在while(true)循环内,表示每个1秒执行一次

2、使用Timer类执行定时任务

/**
 * 使用Timer类实现定时任务
*/
public class Demo02 {
	public static void main(String[] args) {
		TimerTask timerTask = new TimerTask() {

			public void run() {
				System.out.println(“hello”);
			}
		};
		Timer timer = new Timer();
                //执行任务     任务延迟多久开始     任务每隔多久执行一次
		timer.scheduleAtFixedRate(timerTask, delay, period);
	}

}

3、使用juc包下的ScheduledExecutorService类

public class Test {
	static int count = 0;
	public static void main(String[] args) {
		ScheduledExecutorService pool = Executors.newScheduledThreadPool(5);
		pool.scheduleAtFixedRate(new Runnable() {
			public void run() {
				System.out.println(“hello”);
			}
                //任务延迟0秒执行,每隔2秒执行一次
		}, 0, 2, TimeUnit.SECONDS);
	}
}

4、使用quartz框架

引入pom依赖

	<dependencies>
		<!-- quartz -->
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz</artifactId>
			<version>2.2.1</version>
		</dependency>
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz-jobs</artifactId>
			<version>2.2.1</version>
		</dependency>
	</dependencies>

任务调度类,需要实现Job接口

public class MyJob implements Job {

	public void execute(JobExecutionContext context) throws JobExecutionException {
		System.out.println("hello");
	}

}

启动类

  //1.创建Scheduler的工厂
      SchedulerFactory sf = new StdSchedulerFactory();
      //2.从工厂中获取调度器实例
      Scheduler scheduler = sf.getScheduler();


      //3.创建JobDetail
      JobDetail jb = JobBuilder.newJob(MyJob.class)
              .withDescription("this is a job") //job的描述
              .withIdentity("Job", "Mygroup") //job 的name和group
              .build();

      //任务运行的时间,SimpleSchedle类型触发器有效
      long time=  System.currentTimeMillis() + 3*1000L; //3秒后启动任务
      Date statTime = new Date(time);

      //4.创建Trigger
          //使用SimpleScheduleBuilder或者CronScheduleBuilder
      Trigger t = TriggerBuilder.newTrigger()
                  .withDescription("")
                  .withIdentity("Trigger", "TriggerGroup")
                  //.withSchedule(SimpleScheduleBuilder.simpleSchedule())
                  .startAt(statTime)  //默认当前时间启动
                  .withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")) //两秒执行一次
                  .build();

      //5.注册任务和定时器
      scheduler.scheduleJob(jb, t);

      //6.启动 调度器
      scheduler.start();

cron表达式:

http://cron.qqe2.com/

 

5、springboot内置定时任务调度

@Component
public class ScheduledTasks {
    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
    //每隔5秒打印一次
    @Scheduled(fixedRate = 5000)
    public void reportCurrentTime() {
        System.out.println("现在时间:" + dateFormat.format(new Date()));
    }
}

在Spring Boot的主类App.java中加入@EnableScheduling注解,启用定时任务的配置

猜你喜欢

转载自blog.csdn.net/itcats_cn/article/details/82533712