温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java中的scheduleAtFixedRate怎么使用

发布时间:2023-04-27 10:01:59 来源:亿速云 阅读:108 作者:iii 栏目:开发技术

这篇文章主要介绍“Java中的scheduleAtFixedRate怎么使用”,在日常操作中,相信很多人在Java中的scheduleAtFixedRate怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中的scheduleAtFixedRate怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

scheduleAtFixedRate(task,time,period)

task-所要安排的任务 time-首次执行任务的时间 period-执行一次task的时间间隔,单位毫秒

作用:时间等于或超过time首次执行task,之后每隔period毫秒重复执行task

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;
 
public class MyTimerTask extends TimerTask {
    @Override
    public void run() {
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
        System.out.println("Current Time:"+format.format(calendar.getTime()));//获取当前系统时间
        System.out.println("NO.1");
    }
    public static void main(String[] args) {
        MyTimerTask task = new MyTimerTask();
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
        System.out.println(format.format(calendar.getTime()));
        calendar.add(Calendar.SECOND,3);//获取距离当前时间3秒后的时间
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(task,calendar.getTime(),2000);
    }
}

scheduleAtFixedRate(task, delay,period)

task-所要执行的任务 delay-执行任务的延迟时间,单位毫秒 period-执行一次task的时间间隔

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;
 
public class MyTimerTask extends TimerTask {
    @Override
    public void run() {
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
        System.out.println("Current Time:"+format.format(calendar.getTime()));//获取当前系统时间
        System.out.println("NO.1");
    }
    public static void main(String[] args) {
        MyTimerTask task = new MyTimerTask();
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
        System.out.println(format.format(calendar.getTime()));
        calendar.add(Calendar.SECOND,3);//获取距离当前时间3秒后的时间
        Timer timer = new Timer();
        //timer.scheduleAtFixedRate(task,calendar.getTime(),2000);
        timer.scheduleAtFixedRate(task,1000,2000);
    }
}

scheduleAtFixedRate和scheduleWithFixedDelay的区别

 1)scheduleAtFixedRate:可以传入runnable,定制第一次的初始化执行时间,周期时间,单位时间-------创建并执行一个周期性任务,过了给定的初始延迟时间(1min执行一次or其他时间),会第一次被执行。执行过程中发生异常,任务停止。

2)scheduleWithFixedDelay:和上一种相类似-----创建并执行周期性任务,第一次执行及异常情况

A:1s中执行一个任务,每个任务执行时间500ms====两种无区别

B:执行任务时间过长,如间隔时间是1s,而执行时间3s====该情况下有区别,主要在周期时间的区别

scheduleWithFixedDelay该方法中一次任务执行时长超过周期时间,下一次任务会在该次任务执行结束时间基础上,计算执行延时(举例子:如间隔时间是1s,而执行时间3s,当前10:03时触发执行,理论而言,10:04时应当执行新任务,但通过该方法执行,执行结束时为10:06,在10:06的基础上延迟1s执行新任务)

scheduleAtFixedRate该方法(举例子:如间隔时间是1s,而执行时间3s,当前10:03时触发执行,10:06执行结束,10:04及10:05累积的任务会立刻执行,而非在10:06的基础上增加延时时间)

到此,关于“Java中的scheduleAtFixedRate怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI