------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
Timer是java.util包中的帮助工具类,一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。
与每个 Timer 对象相对应的是单个后台线程,用于顺序地执行所有计时器任务。通常这个类就是TimerTask类。计时器任务应该迅速完成。如果完成某个计时器任务的时间太长,那么它会“独占”计时器的任务执行线程。因此,这就可能延迟后续任务的执行,而这些任务就可能“堆在一起”,并且在上述令人讨厌的任务最终完成时才能够被快速连续地执行。
java.util.Timer定时器实际上是个线程,定时调度所拥有的TimerTasks。
Timer有两种执行任务的模式,最常用的是schedule,它可以以两种方式执行任务:1:在某个时间(Data),2:在某个固定的时间之后(int delay).这两种方式都可以指定任务执行的频率。
package com.tai.timer;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class TimerTest
{
public static void main(String[] args)
{
//3000毫秒后执行run方法
new Timer().schedule(new TimerTask()
{
@Override
public void run()
{
System.out.println("start");
}
},3000);
//3000毫秒后执行run方法 以后每隔1000毫秒执行一次
new Timer().schedule(new TimerTask()
{
@Override
public void run()
{
System.out.println("start");
}
},3000,1000);
while (true)
{
try
{
Thread.sleep(1000);
System.out.println(new Date().getSeconds());
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
也可以用自己的TimerTask类去继承TimerTask类
package com.tai.timer;
import java.util.Timer;
import java.util.TimerTask;
public class TimerTest2
{
public static void main(String[] args)
{
new Timer().schedule(new MyTimertask(),2000);
}
}
class MyTimertask extends TimerTask{
@Override
public void run()
{
System.out.println("start");
new Timer().schedule(new MyTimertask(),2000);
}
}
两个TimerTask不同时间间隔循环调度
package com.tai.timer;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class Timer4
{
public static void main(String[] args)
{
new Timer().schedule(new TimerSub1(),2000);
while (true)
{ try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(new Date().getSeconds());
}
}
}
class TimerSub1 extends TimerTask
{
@Override
public void run()
{
System.out.println("From TimerTask1");
new Timer().schedule(new TimerSub2(),2000);
}
}
class TimerSub2 extends TimerTask
{
@Override
public void run()
{
System.out.println("From TimerTask2");
new Timer().schedule(new TimerSub1(),4000);
}
}
上面这种两个TimerTask不同时间间隔循环调度的方式还有多种方式:如:
package com.tai.timer;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class Timer4
{
public static void main(String[] args)
{
new Timer().schedule(new TimerSub1(),2000);
while (true)
{ try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(new Date().getSeconds());
}
}
}
class TimerSub1 extends TimerTask
{
@Override
public void run()
{
System.out.println("From TimerTask1");
new Timer().schedule(new TimerSub2(),2000);
}
}
class TimerSub2 extends TimerTask
{
@Override
public void run()
{
System.out.println("From TimerTask2");
new Timer().schedule(new TimerSub1(),4000);
}
}