千家信息网

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

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍"Timer如何实现自定义时间间隔的连环炸",在日常操作中,相信很多人在Timer如何实现自定义时间间隔的连环炸问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2026年11月01日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如何实现自定义时间间隔的连环炸"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

定时器 任务 时间 连环 方法 两个 延迟 爆炸 学习 输出 对象 次数 这样的话 全局 变量 时候 是在 更多 结果 连环套 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司简介 互联网科技工作委员会 互联网科技工作委员会副主任毛军 A股互联网金融科技公司 互联网最新的科技有限公司 电子科技大学互联网 互联网科技咨询 佩信高科技互联网 安控科技rtu产品工业互联网 博兴的互联网电子科技公司 茂名市互联网科技产业园 互联网对科技的发展 宝灵互联网科技有限公司 互联网科技商业 新兴科技互联网创新大赛颁奖典礼 亳州好赞互联网科技有限公司 广东鹅鹅鹅互联网科技有限公司 互联网科技手抄报图片 恒生科技互联网指数十大成分股 武汉亿视互联网科技有限公司 深圳市人人互联网科技有限公司 互联网是第几次科技革命的成果 互联网扶贫科技 互联网 科技创业 哈尔滨新华互联网科技学院 宁夏众和广鑫互联网科技有限公司 青海科技产业互联网发展 陕西云淼互联网科技公司 科技互联网企业在行动 互联网 科技节活动 微视频大赛
0