• 定时器之Timer


    Timer中的TimerTask就是一个线程,可以一直执行下去的。可以使用Timer类的cancel方法来结束。
    ------------------------------------------------------------------------------------------------------------
    详细参考(转):http://www.360doc.com/content/14/1223/18/7669533_435224094.shtml
    ==============================================================================================================
     Timer是一个线程安全的单线程的任务调度工具,对于任务的调度有如下几种调度方式
       -------------------------------------
       a. 当前时间+时延
       b. 当前时间+时延+任务执行间隔
       c. 当前时间+时延+任务执行周期
       d. 指定时间
       e. 指定时间+时延
       f. 指定时间+时延+任务执行间隔
       g. 指定时间+时延+任务执行周期

    使用了三个参数的schedule方法用来指定task每隔一秒执行一次。如下所列为所有Timer类用来制定计划反复执行task的方法 :

        schedule(TimerTask task, long delay, long period)
        schedule(TimerTask task, Date time, long period)
        scheduleAtFixedRate(TimerTask task, long delay, long period)
        scheduleAtFixedRate(TimerTask task, Date firstTime, long period)

    当计划反复执行的任务时,如果你注重任务执行的平滑度,那么请使用schedule方法,如果你在乎的是任务的执行频度那么使用 scheduleAtFixedRate方法。 例如,这里使用了schedule方法,这就意味着所有beep之间的时间间隔至少为1秒,也就是说,如果有一个beap因为某种原因迟到了(未按计划执 行),那么余下的所有beep都要延时执行。如果我们想让这个程序正好在3秒以后终止,无论哪一个beep因为什么原因被延时,那么我们需要使用 scheduleAtFixedRate方法,
    这样当第一个beep迟到时,那么后面的beep就会以最快的速度紧密执行(最大限度的压缩间隔时间)。

    ===================================================================================================================

    package com.ggzy.dhcp.test;

    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import java.util.Timer;
    import java.util.TimerTask;

    public class TimerTest {
        private String st = "";
        
        public String getSt() {
            return st;
        }
        public void setSt(String st) {
            this.st = st;
        }

        public String timerTt(){
            final List<String> list = new ArrayList<String>();
            private String st = "";
            private void setSt(String st){
                this.st = st;
            }
            
            Timer t = new Timer();
            TimerTask task = new TimerTask(){

                @Override
                public void run() {
                    SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd hh:MM:ss");
                    System.out.println(df.format(new Date()));
                    list.add("1"); //此处list不加final会报错
                    st = "hello";
                    setSt("hello");
                    syso(st);//在此处有值
                }
            };
            syso(st);//在此处是空,以上两种赋值方法都不可行
            System.out.println(list.isEmpty()); //所以run() 里的值在方法外无效
            
            /*t.schedule(task, 1000, 5000);*/
            t.scheduleAtFixedRate(task, 1000, 5000);  // 防延迟
            
            if(st != null && st != ""){
                return st;
            }
            return null;    
        }

      

      @Test

      public void timerTestt(){

        System.out.println("==action==");
              timerTt();
            

        /*String a = timerTt();
              System.out.println(a);*/
              System.out.println("=end=");

      }


    }

    =============================================================
    依旧是返回值问题,没有返回值,并且不能给全局变量赋值。(待解决)

  • 相关阅读:
    并行数据的并行转串行
    色彩空间转换仿真与模型搭建
    布隆过滤器介绍和在java中应用举例
    java9初探
    个人博客开通啦!
    MyBatis多租户隔离插件开发
    手动解析Excel获取文件元数据
    解决Shiro+SpringBoot自定义Filter不生效问题
    基于Redis的分布式锁实现
    解决tomcat同时部署两个SpringBoot应用提示InstanceAlreadyExistsException
  • 原文地址:https://www.cnblogs.com/nnn123/p/6825907.html
Copyright © 2020-2023  润新知