JAVA怎么做定时调度

咱们做大数据的一定不能思维太死,如果太死那就完了,这篇文章给大家介绍的是JAVA语言自带的定时调度功能,但是注意,这个调度功能一般不用再大数据的计算,因为没有Spark等框架的强大计算能力,它通常出现在数据的交互,或者是其他的不涉及计算,但是需要在规定的时间内运行的业务流程

实现功能的如JAVA的util包下的两个类

import java.util.Timer;
import java.util.TimerTask;

那么其实地城跑的就是Thread,有兴趣的可以去看看源码,用的时候如下

import java.util.Timer;
import java.util.TimerTask;

public class TExt {
    
    
    public static void main(String[] args) {
    
    
    
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
    
    
            @Override
            public void run() {
    
    
                System.out.println("2秒后开始执行任务,之后每5秒执行一次");
            }
        },2000,5000);
        
    }
}

写法和用作流程有点想定时线程,schedule方法第一个参数直接用内部类就行,run中写业务流程,第二参数是第一次执行任务时,在程序运行起来之后的那个时间,时间单位是毫秒,第三个参数是从第二次开始每隔多长时间运行一次任务,时间单位也是毫秒

当然timer.schedule还有其他的API

public void schedule(TimerTask task, long delay)
调度一个task,经过delay(ms)后开始进行调度,仅仅调度一次

public void schedule(TimerTask task, Date time)
在指定的时间点time上调度一次

public void schedule(TimerTask task, long delay, long period)
调度一个task,在delay(ms)后开始调度,每次调度完后,最少等待period(ms)后才开始调度

public void schedule(TimerTask task, Date firstTime, long period)
和上一个方法区别就是传入的第二个参数为第一次调度的时间,这个时间是一个date对象

public void scheduleAtFixedRate(TimerTask task, long delay, long period)
这个方法有别于schedule,schedule用的是理论调度时间,也就是说它的调度时间是在程序开始之后就确定的,比2秒后执行第一次,之后每5秒执行一次,那么schedule就会严格2,7,12这样的时间线去跑任务,但是如果某一时刻,因为cpu或者其他问题任务的运行实际时间就会不一样,这会导致任务冲突等种种麻烦的问题,而scheduleAtFixedRate是用每一次任务的实际运行时间去决定下一次任务在上面时间去执行的

public void scheduleAtFixedRate(TimerTask task, Date firstTime,long period)
和上一方法一样,第二个参数是一个date对象

猜你喜欢

转载自blog.csdn.net/dudadudadd/article/details/114027812