iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Timer如何实现自定义时间间隔的连环炸
  • 355
分享到

Timer如何实现自定义时间间隔的连环炸

2023-06-02 21:06:58 355人浏览 泡泡鱼
摘要

这篇文章主要介绍“Timer如何实现自定义时间间隔的连环炸”,在日常操作中,相信很多人在Timer如何实现自定义时间间隔的连环炸问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Timer如何实现自定义时间间隔的

这篇文章主要介绍“Timer如何实现自定义时间间隔的连环炸”,在日常操作中,相信很多人在Timer如何实现自定义时间间隔的连环炸问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Timer如何实现自定义时间间隔的连环炸”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

传统线程技术中有个定时器,定时器的类是 Timer,我们使用定时器的目的就是给它安排任务,让它在指定的时间完成任务。所以先来看一下 Timer 类中的方法(主要看常用的 TimerTask() 方法):

返回值方法名方法描述
voidschedule(TimerTasktask,longdelay)安排在指定延迟后执行指定的任务。
voidschedule(TimerTasktask,longdelay,longperiod)安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。
voidschedule(TimerTasktask,Datetime)安排在指定的时间执行指定的任务
voidschedule(TimerTasktask,DatefirstTime,longperiod)安排指定的任务在指定的时间开始进行重复的固定延迟执行。

前面两个是在指定延迟后执行或者重复执行,后面两个是在指定时间执行或者重复执行。我们以前两个为例来研究一下定时器的使用。先写一个简单的使用定时器的 demo,然后慢慢引申。

public class TraditionalTimer {    public static void main(String[] args) {        //简单定时器的demo        new Timer().schedule(new TimerTask() {                      @Override            public void run() {                //实际中会扔一个对象进来,我们就可以在这里操作这个对象的所有方法了                System.out.println("--boom--");//爆炸            }        }, 2000,3000);         //打印秒钟,一秒输出一次,用来方便观察的        while(true) {            System.out.println(new Date().getSeconds());            try {                Thread.sleep(1000);            } catch(Exception e) {                e.printStackTrace();            }        }    }}

我们用匿名内部类来定义了一个 TimerTask 对象,需要重写 run() 方法,然后运行这个程序,可以看出来第一次2秒钟后打印 “--boom--,后面每隔3秒打印一次。
我们也可以自己来实现上面这个重复执行,我们用定时器的 “连环套”!也就是定时器中再套定时器,一个定时器任务执行完了,在任务的最后再装一个定时器。那么我们需要先定义一个自己的定时器任务,在自己的定时器任务中再装一个定时器,把自定义的定时器任务扔进去。然后我们开启定时器的时候把自己定义的定时器任务扔进去即可。如下:

public class TraditionalTimer {    public static void main(String[] args) {        //自定义一个定时器任务        class MyTimerTask extends TimerTask {                       @Override            public void run() {                System.out.println("--boom--");                //任务执行完再装一个定时器,扔进自定义的定时器任务                new Timer().schedule(new MyTimerTask(), 3000);            }        }        new Timer().schedule(new MyTimerTask(), 2000);//外面开启定时器        while(true) {//打印秒钟,一秒输出一次            System.out.println(new Date().getSeconds());            try {                Thread.sleep(1000);            } catch(Exception e) {                e.printStackTrace();            }        }    }}

这样的话,我们通过定时器的 “连环套” 很轻松的实现了连环爆炸。但是现在问题来了,上面提供的方法中重复执行都是每隔固定的时间,如果我想要隔2秒执行一次,再隔4秒执行一次,再隔2秒执行一次,再隔4秒执行一次……这该如何实现呢?
可以这样,我们定义一个全局的私有成员变量来记录爆炸次数,奇数的时候隔2秒炸,偶数的次数的话隔4秒炸,或者反过来也行,修改如下:

public class TraditionalTimer {    private static int count = 0; //记录爆炸的次数    public static void main(String[] args) {            class MyTimerTask extends TimerTask {                       @Override            public void run() {                count = (count + 1) % 2; //结果只有0和1                System.out.println("--boom--");                                //根据count结果设定新的定时时间                new Timer().schedule(new MyTimerTask(), 2000+2000*count);            }        }        new Timer().schedule(new MyTimerTask(), 2000);        while(true) {//打印秒钟,一秒输出一次            System.out.println(new Date().getSeconds());            try {                Thread.sleep(1000);            } catch(Exception e) {                e.printStackTrace();            }        }    }}

这样的话,我们就实现了自定义爆炸间隔了。上面这个是通过定义一个全局私有变量来实现,其实我们也可以这么干:不是要实现两个不同时间间隔的连环炸么?我可以定义两个定时器任务A和B,在A执行完开启定时器,把B任务装进去,B执行完开启定时器把A装进去,这样也可以。如下:

public class TraditionalTimer {    public static void main(String[] args) {        new Timer().schedule(new MyTimerTaskA(), 2000);//A和B随便开一个        while(true) {//打印秒钟,一秒输出一次            System.out.println(new Date().getSeconds());            try {                Thread.sleep(1000);            } catch(Exception e) {                e.printStackTrace();            }        }    }}//自定义两个定时器任务类,继承TimerTask即可class MyTimerTaskA extends TimerTask {    @Override    public void run() {        System.out.println("--boomA--");        new Timer().schedule(new MyTimerTaskB(), 4000);    }           }class MyTimerTaskB extends TimerTask {    @Override    public void run() {        System.out.println("--boomB--");        new Timer().schedule(new MyTimerTaskA(), 2000);    }   }

到此,关于“Timer如何实现自定义时间间隔的连环炸”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Timer如何实现自定义时间间隔的连环炸

本文链接: https://www.lsjlt.com/news/231294.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Timer如何实现自定义时间间隔的连环炸
    这篇文章主要介绍“Timer如何实现自定义时间间隔的连环炸”,在日常操作中,相信很多人在Timer如何实现自定义时间间隔的连环炸问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Timer如何实现自定义时间间隔的...
    99+
    2023-06-02
  • Android自定义控件实现时间轴
    本文实例为大家分享了Android自定义控件实现时间轴的具体代码,供大家参考,具体内容如下 由于项目中有需求,就简单的封装一个,先记录一下,有时间上传到github。 1、先增加自定...
    99+
    2024-04-02
  • android自定义控件如何实现简易时间轴
    这篇“android自定义控件如何实现简易时间轴”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“android自定义控件如何实现简易时间轴”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过...
    99+
    2023-06-28
  • MySQl中如何自定义时间排序
    今天就跟大家聊聊有关MySQl中如何自定义时间排序,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。MySQl时间自定义排序 SELEC...
    99+
    2024-04-02
  • android自定义控件实现简易时间轴(1)
    本文实例为大家分享了android自定义控件实现简易时间轴的具体代码,供大家参考,具体内容如下 之前项目需要写一个消费记录,类似于时间轴似的控件,自身在自定义控件这里不咋地(&hel...
    99+
    2024-04-02
  • android自定义控件实现简易时间轴(2)
    这篇做了一个简单的时间轴控件。右侧的数据就是一个简单的字符串。问题还是有的,当右侧的文字长度不一样的时候就会有问题了。现在可以修改一下适配右侧的文字。 效果如下: 代码: priv...
    99+
    2024-04-02
  • 如何实现在一个时间段内进行间隔查询
    这篇文章主要介绍“如何实现在一个时间段内进行间隔查询”,在日常操作中,相信很多人在如何实现在一个时间段内进行间隔查询问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何实现在一...
    99+
    2024-04-02
  • angularJS如何实现自定义指令间的相互交互
    小编给大家分享一下angularJS如何实现自定义指令间的相互交互,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!AngularJ...
    99+
    2024-04-02
  • android自定义控件是怎么实现简易时间轴
    这篇文章主要为大家分析了android自定义控件是怎么实现简易时间轴的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“android自定义控件是怎么实现简易时间...
    99+
    2023-06-28
  • SpringBoot如何配置Redis自定义过期时间操作
    这篇文章主要介绍SpringBoot如何配置Redis自定义过期时间操作,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!SpringBoot配置Redis自定义过期时间Redis配置依赖<dependency&g...
    99+
    2023-06-20
  • 如何实现sql中时间以5分钟半个小时任意间隔分组
    这篇文章主要介绍了如何实现sql中时间以5分钟半个小时任意间隔分组,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。开发中遇到过问题就是对时间以...
    99+
    2024-04-02
  • java自定义类加载器如何实现类隔离
    目录自定义类加载器准备通过URLClassLoader来实现【推荐】通过继承ClassLoader实现网上java自定义类加载器很多容易找到,但是都是加载的单个类,如果被加载的类,有...
    99+
    2022-11-21
    java类隔离 自定义类加载器 java类加载器
  • Python如何实现自动计算特定格式的时间差
    这篇文章主要讲解了“Python如何实现自动计算特定格式的时间差”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python如何实现自动计算特定格式的时间差”吧!功能输入一个特定格式的时间戳,...
    99+
    2023-06-22
  • 如何用mysql自带的定时器定时执行sql(每天0点执行与间隔分/时执行)
    目录需求1.查看是否开启定时策略2.创建存储函数,存储定时执行的事件3.创建定时任务4.查看创建的定时任务5.开启或关闭定时任务补充:ON SCHEDULE后面可以 自由发挥补充:定时器常用案例总结需求 每天往一个表里面...
    99+
    2023-03-01
    mysql定时执行sql语句 mysql 定时执行 mysql定时器
  • JS如何实现时间轴自动播放
    这篇文章主要为大家展示了“JS如何实现时间轴自动播放”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JS如何实现时间轴自动播放”这篇文章吧。最近实现了一个这样的效果,点击播放按钮,时间轴开始播放,...
    99+
    2023-06-20
  • PostgreSQL如何实现自动更新时间戳
    这篇文章主要介绍PostgreSQL如何实现自动更新时间戳,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是PostgreSQL时间戳数据类型?在PostgreSQL中,下一个数据类型是 TIMESTAMP ,它可...
    99+
    2023-06-21
  • 掌握Go语言文档中的time.Tick函数实现间隔定时器
    Go语言是一种功能强大、灵活性高的编程语言,其拥有丰富的标准库和文档,提供了许多实用的函数和工具。其中,time.Tick函数是Go语言中非常好用的一个函数,它可以帮助我们实现在一定时间间隔内执行某些代码的功能,即间隔定时器。本文将介绍如何...
    99+
    2023-11-03
    Go语言 timeTick 间隔定时器
  • Ubuntu系统上如何自定义图形化桌面时间显示
    这篇文章主要介绍“Ubuntu系统上如何自定义图形化桌面时间显示”,在日常操作中,相信很多人在Ubuntu系统上如何自定义图形化桌面时间显示问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Ubuntu系统上如何...
    99+
    2023-06-13
  • java如何实现自定义时钟并走时功能
    本文小编为大家详细介绍“java如何实现自定义时钟并走时功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“java如何实现自定义时钟并走时功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。效果图:很多人想要自己...
    99+
    2023-07-02
  • Android如何自定义view实现半圆环效果
    小编给大家分享一下Android如何自定义view实现半圆环效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下1.自定义属性<declare-s...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作