java中Timer和TimerTask用法

2024-03-03 21:38
文章标签 java 用法 timer timertask

本文主要是介绍java中Timer和TimerTask用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

经常我们都会有这样的需求,要固定的每隔一段时间执行某一个任务。比如我们做一个缓存来减少与数据库的交互,而为了使缓存与数据库中的数据尽量达到同步,需要每个固定的一段时间去数据库中的数据是否有更新以达到与缓存的同步。这样的需求可以做一个线程,线程中做一个死循环,循环中就是要执行的这个任务,每执行完一次让线程睡眠一段时间,这要就可以达到这个需求。但是用最简单最便捷的方式是使用Java为我们提供的计时器的工具类,即Timer和TimerTask。
      Timer是一个普通的类,其中有几个重要的方法;而TimerTask则是一个抽象类,其中有一个抽象方法run(),类型线程中的run()方法。我们使用Timer创建一个他的对象,然后使用这对象的schedule方法来完成这种间隔的操作。schedule方法有三个参数,其中第一个参数就是TimerTask类型的对象,我们实现TimerTask的run()方法就是要周期执行的一个任务;第二个参数有两种类型,第一种是long类型,表示多长时间后开始执行,另一种是Date类型,表示从那个时间后开始执行;而第三个参数就是执行的周期,为long类型。schedule方法还有一种两个参数的执行重载,第一个参数仍然是TimerTask,第二个表示为long的形式表示多长时间后执行一次,为Date就表示某个时间后执行一次。
    需要注意的是Timer就是一个线程,使用schedule方法完成对TimerTask的调度,多个TimerTask可以共用一个Timer,也就是说Timer对象调用一次schedule方法就是创建了一个线程,并且调用一次schedule后TimerTask是无限制的循环下去的,使用Timer的cancel()停止操作。当然同一个Timer执行一次cancel()方法后,所有Timer线程都被终止。
下面是示列代码:


  1.  java.util.Timer timer = new java.util.Timer(true);     
  2.  // true 说明这个timer以daemon方式运行(优先级低,     
  3.  // 程序结束timer也自动结束),注意,javax.swing     
  4.  // 包中也有一个Timer类,如果import中用到swing包,     
  5.  // 要注意名字的冲突。     
  6.         
  7. TimerTask task = new TimerTask() {     
  8.     public void run() {     
  9.     ... //每次需要执行的代码放到这里面。     
  10.     }     
  11. };     
  12.         
  13. //以下是几种调度task的方法:        
  14. timer.schedule(task, time);     
  15. // time为Date类型:在指定时间执行一次。     
  16.         
  17. timer.schedule(task, firstTime, period);     
  18. // firstTime为Date类型,period为long     
  19. // 从firstTime时刻开始,每隔period毫秒执行一次。     
  20.         
  21. timer.schedule(task, delay)     
  22. // delay 为long类型:从现在起过delay毫秒执行一次     
  23.         
  24. timer.schedule(task, delay, period)     
  25. // delay为long,period为long:从现在起过delay毫秒以后,每隔period     
  26. // 毫秒执行一次。    


完整的示例代码:
1、定制任务:

Java代码  
  1. import java.util.Timer;          
  2. public class TimerTaskTest extends java.util.TimerTask{    
  3.         
  4.     @Override    
  5.     public void run() {    
  6.        // TODO Auto-generated method stub    
  7.        System.out.println("start");    
  8.     }    
  9. }    


2.调用java.util.Timer :

Java代码  
  1. import java.util.Timer;          
  2. public class Test {    
  3.     public static void main(String[] args){    
  4.         Timer timer = new Timer();   
  5.         timer.schedule(new TimerTaskTest(), 10002000);    
  6.      }    
  7.  }    


以上代码表示1秒后开始每个2秒钟执行一次TimerTaskTest中的run()方法。

这篇关于java中Timer和TimerTask用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/770994

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

JDK21对虚拟线程的几种用法实践指南

《JDK21对虚拟线程的几种用法实践指南》虚拟线程是Java中的一种轻量级线程,由JVM管理,特别适合于I/O密集型任务,:本文主要介绍JDK21对虚拟线程的几种用法,文中通过代码介绍的非常详细,... 目录一、参考官方文档二、什么是虚拟线程三、几种用法1、Thread.ofVirtual().start(

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Java中的.close()举例详解

《Java中的.close()举例详解》.close()方法只适用于通过window.open()打开的弹出窗口,对于浏览器的主窗口,如果没有得到用户允许是不能关闭的,:本文主要介绍Java中的.... 目录当你遇到以下三种情况时,一定要记得使用 .close():用法作用举例如何判断代码中的 input