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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于SpringBoot实现七天免登录的完整流程

    基于SpringBoot实现七天免登录的完整流程

    作为一名Java后端高级开发,我敢说七天免登录是业务系统里最常见的需求之一,这个需求看似简单,但实现不好很容易踩坑:要么免登录失效影响用户体验,要么出现安全漏洞导致账号被盗,今天这篇文章,我就结合实际工作经验,讲透七天免登录的标准实现方案
    2026-01-01
  • Java中synchronized的优化措施

    Java中synchronized的优化措施

    这篇文章主要介绍了Java中synchronized的优化,介绍为了实现高效并发,虚拟机对synchronized 做的一系列的锁优化措施,本文给大家介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • MybatisGenerator文件生成不出对应文件的问题

    MybatisGenerator文件生成不出对应文件的问题

    本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成器的路径等,通过在项目结构中引入相应的jar包,并在GeneratorSqlmap.java文件中运行,可以成功生成对应的文件
    2025-01-01
  • JAVA IDEA项目打包为jar包的步骤详解

    JAVA IDEA项目打包为jar包的步骤详解

    在Java开发中我们通常会将我们的项目打包成可执行的Jar包,以便于在其他环境中部署和运行,下面这篇文章主要给大家介绍了关于JAVA IDEA项目打包为jar包的相关资料,需要的朋友可以参考下
    2024-08-08
  • SpringBoot工程中测试连接DaMeng数据库实践

    SpringBoot工程中测试连接DaMeng数据库实践

    本文介绍了如何在SpringBoot工程中配置达梦数据库,并通过添加相关依赖和编写测试代码进行连接测试,最终成功实现数据库连接
    2026-01-01
  • springboot自动装配之@ComponentScan使用方式

    springboot自动装配之@ComponentScan使用方式

    @componentScan注解用于扫描指定路径下的组件,并自动将它们注册为Spring Bean,该注解支持多种过滤规则,可以自定义扫描过滤规则,Spring Boot通过ConfigurationClassPostProcessor处理@ComponentScan注解,并在启动时创建和注册BeanDefinition对象
    2025-01-01
  • SpringBoot中实现接收文件和对象

    SpringBoot中实现接收文件和对象

    这篇文章主要介绍了SpringBoot实现接收文件和对象,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Java如何将二维数组转化为一维数组

    Java如何将二维数组转化为一维数组

    这篇文章主要介绍了Java如何将二维数组转化为一维数组,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Spring中基于XML的面向切面编程(AOP)详解

    Spring中基于XML的面向切面编程(AOP)详解

    这篇文章主要详细介绍了Spring中基于XML的面向切面编程(AOP),文中通过代码示例给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-04-04
  • java 实现MD5加密算法的简单实例

    java 实现MD5加密算法的简单实例

    这篇文章主要介绍了java 实现MD5加密算法的简单实例的相关资料,这里提供实例帮助大家应用这样的加密算法,需要的朋友可以参考下
    2017-09-09

最新评论