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

  }

}

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

05-29 00:13