zoukankan      html  css  js  c++  java
  • Java多线程-定时器Timer的使用

    方法 schedule(TimerTask task, Date time)

    该方法的作用是在指定的日期执行一次某一任务。

    注意:

      TimerTask 是以队列的方式一个一个被顺序执行的,所以执行的时间有可能和预期时间不一致,因为前面的任务有可能消耗的时间较长,则后面的任务运行的时间也会被延迟。

    示例:

    public class Test {
        private static Timer timer = new Timer();
        static class MyTask extends TimerTask {
            @Override
            public void run() {
                System.out.println("运行了!时间为:" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
            }
        }
    
        public static void main(String[] args) throws ParseException {
            MyTask task = new MyTask();
            Date date = DateUtils.parseDate("2020-03-25 14:01:00", "yyyy-MM-dd HH:mm:ss");
            timer.schedule(task, date);
        }
    }

    运行结果如下:

    方法 schedule(TimerTask task, Date firstTime, long period)

    该方法的作用是在指定的日期之后,按指定的间隔周期性的无限循环地执行某一任务。

    TimerTask类的 cancel() 方法

    该方法的作用是将自身从任务队列中清除。

    注意:

      cancel() 方法有时不一定会停止执行计划任务,而是正常执行。原因是因为 cancal() 方法没有竞争到 queue 的锁,所以未能执行清除队列的操作导致的。

    示例:

    public class Test {
        private static Timer timer = new Timer();
        static class MyTaskA extends TimerTask {
            @Override
            public void run() {
                System.out.println("A运行了!时间为:" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
                this.cancel();
            }
        }
    
        static class MyTaskB extends TimerTask {
            @Override
            public void run() {
                System.out.println("B运行了!时间为:" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
            }
        }
    
        public static void main(String[] args) throws ParseException {
            MyTaskA taskA = new MyTaskA();
            MyTaskB taskB = new MyTaskB();
            Date date = DateUtils.parseDate("2020-03-25 14:16:30", "yyyy-MM-dd HH:mm:ss");
            timer.schedule(taskA, date, 2000);
            timer.schedule(taskB, date, 2000);
        }
    }

    运行结果如图:

  • 相关阅读:
    1CSS与文档
    14交互活动:XHTML表单
    13开始制作表格:表格和列表
    12布置元素:布局和排版
    11高级网站构建:div和span
    10与元素亲密接触:盒元素(the box model)
    tp5.1 与vue ajax请求跨域的问题
    小程序父子组件互相传参,互相调用方法
    PHP/js数组与字符串的操作,字符串转数组,数组转字符串,去掉字符串最后一个字符,判断二维数组是否为空等
    easyui datagrid分页栏位置问题
  • 原文地址:https://www.cnblogs.com/lkc9/p/12565896.html
Copyright © 2011-2022 走看看