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=");}
}=============================================================依旧是返回值问题,没有返回值,并且不能给全局变量赋值。(待解决)