您好,欢迎来到客趣旅游网。
搜索
您的当前位置:首页java 定时任务实现方式

java 定时任务实现方式

来源:客趣旅游网

简介

一. jdk之Timer

  1. schedule(TimerTask task, long delay) 延迟 delay 毫秒 执行
  2. schedule(TimerTask task, Date time) 特定时间执行
  3. schedule(TimerTask task, long delay, long period) 延迟 delay 毫秒 执行并每隔period 毫秒 执行一次
// 延迟2秒, 每隔3秒打印一次当前时间
public static void main(String[] args) {
    new Timer().schedule(new TimerTask() {
        @Override
        public void run() {
            System.out.println(LocalDateTime.now());
        }
    }, 2000L, 3000L);
}

二. jdk之ScheduledThreadPoolExecutor

ScheduledExecutorService 接口实现类
ScheduledExecutorService 是JAVA 1.5 后新增的定时任务接口,主要有以下几个方法。

1.  ScheduledFuture<?> schedule(Runnable command,long delay, TimeUnit unit);
2.  <V> ScheduledFuture<V> schedule(Callable<V> callable,long delay, TimeUnit unit);
3.  ScheduledFuture<?> scheduleAtFixedRate(Runnable command,long initialDelay,long period,TimeUnitunit);
4.  ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,long initialDelay,long delay,TimeUnitunit);

// 延迟2秒, 每隔2秒钟打印一次当前时间
public static void main(String[] args) {
    ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(1);
    scheduledThreadPoolExecutor.scheduleAtFixedRate(()->System.out.println(LocalDateTime.now()), 2L, 2L, TimeUnit.SECONDS);
}

三. spring之TaskScheduler

介绍: 轻量级quartz, 使用起来简单
使用方式:

  1. 配置式
<task:scheduler id="myScheduler" pool-size="10" />
<task:scheduled-tasks scheduler="myScheduler">
    <task:scheduled ref="job" method="test" cron="0 * * * * ?"/>
</task:scheduled-tasks>
  1. 注解式(最常用)
  • 先启用注解
    spring项目需要再配置文件中启用
<task:scheduler id="myScheduler" pool-size="10" />
// 启用注解
<task:annotation-driven scheduler="myScheduler"/> 

springboot项目需要在启动类中启用注解

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
// 启用注解
@EnableScheduling
public class SpringbootDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootDemoApplication.class, args);
    }
}
  • 再使用注解和cron表达式
// 每隔5秒钟执行一次test方法
@Scheduled(cron = "0/5 * * * * ?")
public void test() {
    System.out.println(LocalDateTime.now());
}
  1. 编程式(略…)

四. quartz

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- kqyc.cn 版权所有 赣ICP备2024042808号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务