Java中的Timer和TimerTask详细解读

 更新时间:2023年10月27日 08:32:55   作者:寻道的 Programmer  
这篇文章主要介绍了Java中的Timer和TimerTask详细解读,  Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口,需要的朋友可以参考下

Timer和TimerTask

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

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

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

import java.util.Timer;
import java.util.TimerTask;
public class TimerTest {
	static class MyTimerTask1 extends TimerTask {
		public void run() {
			System.out.println("爆炸!!!");
		}
	}	
	public static void main(String[] args) {
		Timer timer = new Timer();
		timer.schedule(new MyTimerTask1(), 2000);// 两秒后启动任务
	}
}

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

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

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class TimerTest {
	static class MyTimerTask1 extends TimerTask {
		public void run() {
			System.out.println("爆炸!!!");
			new Timer().schedule(new MyTimerTask2(), 2000);
		}
	}
	static class MyTimerTask2 extends TimerTask {
		public void run() {
			System.out.println("爆炸!!!");
			new Timer().schedule(new MyTimerTask1(), 3000);
		}
	}
	public static void main(String[] args) {
		Timer timer = new Timer();
		timer.schedule(new MyTimerTask2(), 2000);
		while(true) {
			System.out.println(new Date().getSeconds());
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

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

到此这篇关于Java中的Timer和TimerTask详细解读的文章就介绍到这了,更多相关Java的Timer和TimerTask内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入了解Java语言中的并发性选项有何不同

    深入了解Java语言中的并发性选项有何不同

    这篇文章主要介绍了深入了解Java语言中的并发性选项有何不同,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06
  • Java实现时间动态显示方法汇总

    Java实现时间动态显示方法汇总

    这篇文章主要介绍了Java实现时间动态显示方法汇总,很实用的功能,需要的朋友可以参考下
    2014-08-08
  • java程序中foreach用法示例

    java程序中foreach用法示例

    这篇文章主要介绍了java程序中foreach用法示例,需要的朋友可以参考下
    2014-04-04
  • Java对象的内存布局全流程

    Java对象的内存布局全流程

    这篇文章主要介绍了Java对象的内存布局全流程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Java优雅的处理金钱问题(BigDecimal)

    Java优雅的处理金钱问题(BigDecimal)

    本文主要介绍了Java优雅的处理金钱问题(BigDecimal),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 深入理解JAVA基础类库中对象Object类

    深入理解JAVA基础类库中对象Object类

    Object类是一个特殊的类,是所有类的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类。这里主要总结Object类中的两个:toString()与equals()方法
    2021-09-09
  • Spring MVC处理方法返回值过程解析

    Spring MVC处理方法返回值过程解析

    这篇文章主要介绍了Spring MVC处理方法返回值过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Java设计模式之策略模式定义与用法详解

    Java设计模式之策略模式定义与用法详解

    这篇文章主要介绍了Java设计模式之策略模式定义与用法,结合具体实例形式详细分析了Java策略模式的概念、原理、定义及相关操作技巧,需要的朋友可以参考下
    2018-02-02
  • SpringBoot @FixMethodOrder 如何调整单元测试顺序

    SpringBoot @FixMethodOrder 如何调整单元测试顺序

    这篇文章主要介绍了SpringBoot @FixMethodOrder 调整单元测试顺序方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Mybatis之RowBounds分页原理详解

    Mybatis之RowBounds分页原理详解

    这篇文章主要介绍了Mybatis之RowBounds分页原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02

最新评论