使用Timer
public class TestTimer {
public static void main(String[] args) {
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
System.out.println("task run:"+ new Date());
}
};
Timer timer = new Timer();
//安排指定的任务在指定的时间开始进行重复的固定延迟执行。这里是每3秒执行一次
timer.schedule(timerTask,10,3000);
}
}
使用ScheduledExecutorService
public class TestScheduledExecutorService {
public static void main(String[] args) {
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
// 参数:1、任务体 2、首次执行的延时时间
// 3、任务执行间隔 4、间隔时间单位
service.scheduleAtFixedRate(()->System.out.println("task ScheduledExecutorService "+new Date()), 0, 3, TimeUnit.SECONDS);
}
}
使用Spring Task
需要在配置类或启动类上标注注解@EnableScheduling,并在定时执行的无参方法上标注注解@Scheduled,程序启动会根据@Scheduled所提供的信息定时 执行。
@Configuration
@EnableScheduling
public class SchedulingConfig {
private final Logger logger = LoggerFactory.getLogger(getClass());
@Resource
private RobotRestServiceImpl robotRestService;
@Scheduled(cron = "0 0/10 * * * ?") // 每10分钟执行一次
public void getToken() {
logger.info("getToken定时任务启动");
}
}
执行时间的配置:
(1)fixedRate:定义一个按一定频率执行的定时任务。
(2)fixedDelay:定义一个一定频率执行的定时任务,该属性可以配置initialDelay定义任务延迟执行时间。
(3)cron:通过表达式来配置任务执行时间
cron表达式:
一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。
(1)秒(0~59)
(2)分钟(0~59)
(3)小时(0~23)
(4)天(0~31)
(5)月(0~11)
(6)星期(1~7,1=sun)
(7)年份(1970~2099)
其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(表示每隔4小时),一个列表(1,3,5),通配符。由于月份中的日期和星期中的日期互斥,必段要对其中一个设置。
最后欢迎大家访问我的个人网站:1024s