博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
定时器之Timer
阅读量:5157 次
发布时间:2019-06-13

本文共 2543 字,大约阅读时间需要 8 分钟。

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=");

  }

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

转载于:https://www.cnblogs.com/nnn123/p/6825907.html

你可能感兴趣的文章
实现字符串反转
查看>>
转载:《TypeScript 中文入门教程》 5、命名空间和模块
查看>>
苹果开发中常用英语单词
查看>>
[USACO 1.4.3]等差数列
查看>>
Shader Overview
查看>>
Reveal 配置与使用
查看>>
Java中反射的学习与理解(一)
查看>>
C语言初学 俩数相除问题
查看>>
B/S和C/S架构的区别
查看>>
[Java] Java record
查看>>
jQuery - 控制元素显示、隐藏、切换、滑动的方法
查看>>
postgresql学习文档
查看>>
Struts2返回JSON数据的具体应用范例
查看>>
js深度克隆对象、数组
查看>>
socket阻塞与非阻塞,同步与异步
查看>>
团队工作第二天
查看>>
System类
查看>>
tableView
查看>>
Happy Great BG-卡精度
查看>>
Xamarin Visual Studio不识别JDK路径
查看>>