Java线程:Timer和TimerTask

Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口。

Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力。

一个Timer可以调度任意多个TimerTask,它会将TimerTask存储在一个队列中,顺序调度,如果想两个TimerTask并发执行,则需要创建两个Timer。下面来看一个简单的例子:

[java] view plaincopyprint?

  1. import java.util.Timer;
  2. import java.util.TimerTask;
  3. public class TimerTest {
  4. static class MyTimerTask1 extends TimerTask {
  5. public void run() {
  6. System.out.println("爆炸!!!");
  7. }
  8. }
  9. public static void main(String[] args) {
  10. Timer timer = new Timer();
  11. timer.schedule(new MyTimerTask1(), 2000);// 两秒后启动任务
  12. }
  13. }

schedule是Timer调度任务的方法,Timer重构了四个schedule方法,具体可以查看JDK API。

看一个稍复杂的例子,假设有这样一种需求,实现一个连环炸弹,2秒后爆炸一次,3秒后爆炸一次,如此循环下去,这就需要创建两个任务,互相调度,代码如下:

[java] view plaincopyprint?

  1. import java.util.Date;
  2. import java.util.Timer;
  3. import java.util.TimerTask;
  4. public class TimerTest {
  5. static class MyTimerTask1 extends TimerTask {
  6. public void run() {
  7. System.out.println("爆炸!!!");
  8. new Timer().schedule(new MyTimerTask2(), 2000);
  9. }
  10. }
  11. static class MyTimerTask2 extends TimerTask {
  12. public void run() {
  13. System.out.println("爆炸!!!");
  14. new Timer().schedule(new MyTimerTask1(), 3000);
  15. }
  16. }
  17. public static void main(String[] args) {
  18. Timer timer = new Timer();
  19. timer.schedule(new MyTimerTask2(), 2000);
  20. while(true) {
  21. System.out.println(new Date().getSeconds());
  22. try {
  23. Thread.sleep(1000);
  24. } catch (InterruptedException e) {
  25. // TODO Auto-generated catch block
  26. e.printStackTrace();
  27. }
  28. }
  29. }
  30. }

自JDK5之后,可以用ScheduledThreadPoolExecutor来替代Timer。

时间: 2024-11-10 11:49:41

Java线程:Timer和TimerTask的相关文章

定时任务:Java中Timer和TimerTask的使用

java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks. 一个TimerTask实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内,TimerTask一般是以匿名类的方式创建. 一个完整的Timer: Java代码   java.util.Timer timer = new java.util.Timer(true); // true 说明这个timer以daemon方式运行(优先级低, // 程序结束timer也自动结束),注意,java

java的Timer和TimerTask

java中Timer类使用的方法是如下的: Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() { System.out.println("abc"); } }, 200000 , 1000); 但是实现的原理是怎么样的.下图是Timer源码的实现方式: 总体来说,Timer中有一个TaskQueue和TimerThread.TaskQueue存放的是任务的堆,最先执行的任务放在最前

Java计时器Timer和TimerTask用法

1 package com.sy.game.test; 2 3 import java.util.Timer; 4 import java.util.TimerTask; 5 6 public class TimeTask { 7 8 public static void main(String[] args) { 9 TimeTask tTask=new TimeTask(); 10 tTask.timeVoid(); 11 } 12 13 public void timeVoid(){ 14

Java中的Timer和TimerTask在Android中的用法(转)

转自:http://blog.csdn.net/zuolongsnail/article/details/8168689 在开发中我们有时会有这样的需求,即在固定的每隔一段时间执行某一个任务.比如UI上的控件需要随着时间改变,我们可以使用Java为我们提供的计时器的工具类,即Timer和TimerTask. Timer是一个普通的类,其中有几个重要的方法:而TimerTask则是一个抽象类,其中有一个抽象方法run(),类似线程中的run()方法,我们使用Timer创建一个他的对象,然后使用这对

Java线程与多线程教程

本文由 ImportNew - liken 翻译自 Journaldev. Java线程是执行某些任务的轻量级进程.Java通过Thread类提供多线程支持,应用可以创建并发执行的多个线程. 应用中有两类线程——用户线程和守护线程.当启动应用时,main线程是创建的第一个用户线程,我们可以创建多个用户线程和守护线程.当所有用户进程执行完毕时,JVM终止程序. 可以对不同的线程设置不同的属性,但并不保证高优先级的线程在低优先级线程之前执行.线程调度器是操作系统的部分实现,当一个线程启动后,它的执行

【Java】利用Timer与TimerTask定时执行任务

在Java里面定时执行一条任务多用于线程与进程配合Thread.currentThread().sleep(XXX);来实现,但是一些小型的任务其实完全利用Timer与TimerTask定时执行,Timer与TimerTask组合跟Thread与Runnable的区别在于,Timer与TimerTask是纯粹的单线程定时执行任务的计时器,相当于Thread与Runnable配合Thread.currentThread().sleep(XXX);的特殊情况,但程序写法定时器没有线程那么复杂.Thr

java定时器Timer,TimerTask每隔一段时间随机生成数字

1:java.util.Timer类是一种工具,线程用其安排以后在后台线程中执行的任务.可安排任务执行一次,或者定期重复执行. 2:TimerTask类是由 Timer 安排为一次执行或重复执行的任务,因为有TimerTask类是一个抽象类,必须有其子类对其实现来完成定时任务的功能. TimerCallClient .java客户端代码: Timercallclient.java代码   package com.skyon.gd.test; import java.util.Timer; /**

Java并发编程:Timer和TimerTask

下面内容转载自: http://blog.csdn.net/xieyuooo/article/details/8607220 其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个类,而具体的TimerTask需要由你自己来实现,例如这样: ? 1 2 3 4 5 6 Timer timer = new Timer(); timer.schedule(new TimerTask() {         public void run() {           

Java并发编程(十五):Timer和TimerTask(转载)

下面内容转载自: http://blog.csdn.net/xieyuooo/article/details/8607220 其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个类,而具体的TimerTask需要由你自己来实现,例如这样: 1 2 3 4 5 6 Timer timer = new Timer(); timer.schedule(new TimerTask() {         public void run() {