为什么80%的码农都做不了架构师?>>>   

一、Timer概述

在Java开发中,会碰到一些需要定时或者延时执行某些任务的需求,这时,我们可以使用Java中的Timer类实现。

二、Timer介绍

Timer是一个定时器类,通过该类可以为指定的定时任务进行配置,所在jar包路径:java.util.Timer
Timer定时器实例有多种构造方法:
Timer() // 创建一个新计时器
Timer(boolean isDaemon) //创建一个新计时器,可以指定其相关的线程作为守护程序运行
Timer(String name) //创建一个新计时器,其相关的线程具有指定的名称
Timer(String name, boolean isDaemon) //创建一个新计时器,其相关的线程具有指定的名称,并且可以指定作为守护程序运行
TimerTask类是一个定时任务类,该类实现了Runnable接口,而且是一个抽象类,所在jar包路径:java.util.TimerTask
// 可以通过继承该类,来实现自己的定时任务。
public abstract class TimerTask implements Runnable

三、Timer常用方法

在特定时间执行任务,只执行一次 public void schedule(TimerTask task,Date time) 在特定时间之后执行任务,只执行一次 public void schedule(TimerTask task, long delay) 指定第一次执行的时间,然后按照间隔时间,重复执行 public void schedule(TimerTask task, Date firstTime, long period) 在特定延迟之后第一次执行,然后按照间隔时间,重复执行

public void schedule(TimerTask task, long delay, long period)
/*参数说明delay: 延迟执行的毫秒数,即在delay毫秒之后第一次执行period:重复执行的时间间隔
*/

第一次执行之后,特定频率执行,与3效果相同

public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)

在delay毫秒之后第一次执行,后按照特定频率执行

public void scheduleAtFixedRate(TimerTask task, long delay, long period)

Timer注销

timer.cancel();

schedule()和scheduleAtFixedRate()的区别

schedule()方法更注重保持间隔时间的稳定:保障每隔period时间可调用一次 scheduleAtFixedRate()方法更注重保持执行频率的稳定:保障多次调用的频率趋近于period时间,如果任务执行时间大于period,会在任务执行之后马上执行下一次任务 四、Timer使用示例

使用Timer每隔2秒打印一次数据,并且任务在Timer启动1秒之后开始

import java.util.Timer;
import java.util.TimerTask;public class TestTimer {public static void main(String[] args) {Timer timer = new Timer();timer.schedule(new MyTask(), 1000, 2000);}}class MyTask extends TimerTask {@Overridepublic void run() {System.out.println("每隔2秒我就出现一次……");}}

使用Timer每隔一段时间随机生成数字

import java.util.Timer;
import java.util.Random;
import java.util.TimerTask;public class TimerTest {public static void main(String[] args) {Timer timer = new Timer();NewTimerTask timerTask = new NewTimerTask();//程序运行后立刻执行任务,每隔100ms执行一次timer.schedule(timerTask, 0, 100);}}class NewTimerTask extends TimerTask {@Overridepublic void run() {createRandomNumber();createRandomNumberFromMathRandom();}//用纯Math中的方法来随机生成1-10之间的随机数private void createRandomNumberFromMathRandom() {int j = (int)(Math.round(Math.random()*10 + 1));System.out.println("随机生成的数字为:"+j);}//用Random类的方式来随机生成1-10之间的随机数private void createRandomNumber() {Random random = new Random(System.currentTimeMillis());int value = random.nextInt();value = Math.abs(value);value = value%10 + 1;System.out.println("新生成的数字为:" + value);}}

五、小结

通过上面的两个简单示例,我们可以很清楚的知道Timer的用法:

实现TimerTask接口,并即为单元任务,我们的单次运行业务逻辑写在这里面 实例化一个Timer对象,用于启动TimerTask任务,并通过调用不同的方法设置任务的执行时间、频率 在实际的应用中,Timer多用于在夜间处理比较耗时并且数据状态稳定时候的一些后台操作,例如数据统计、数据备份等。

转载于:https://my.oschina.net/biezhi/blog/485730

使用Timer执行定时任务相关推荐

  1. Java的定时器Timer和定时任务TimerTask应用以及原理简析

    记录:272 场景:Java JDK自带的定时器Timer和定时任务TimerTask应用以及原理简析.在JDK工具包:java.util中可以找到源码,即java.util.Timer和java.u ...

  2. java timer 重启服务器_服务器启动完成执行定时任务Timer,TimerTask

    由于项目需求:每隔一段时间就要调外部接口去进行某些操作,于是在网上找了一些资料,用了半天时间弄好了,代码: 1 importjava.util.TimerTask;2 3 public class A ...

  3. Android service后台执行定时任务

    Android 的定时任务 1,Java的API提供的Timer类 Android 中使用容易受手机的休眠系统影响(例如:手机休眠,导致了这个功能的停止). 2,Android的Alarm机制 Ala ...

  4. 分布式定时任务原理以及解决方案-指定时间执行定时任务

    分布式定时任务原理以及实现 一.单机指定时间执行定时任务实现方式 Timer运行机制 ScheduledThreadPoolExecutor的运行机制 原理图 Leader/Follower模式 Ti ...

  5. python执行定时任务

    python执行定时任务,首先如果是在linux系统下,完全没必要使用python的定时任务模块了,因为linux有自带的强大的crontab模块,那么接下来就讲一讲windows下python的定时 ...

  6. Timer实现定时任务

    web.xml配置Listener: <listener><listener-class>com.prison.controller.TimerManager</list ...

  7. Golang 基础案例集合:中文拼音转换、解析二维码、压缩 zip、执行定时任务

    前言 曾经,因为不够注重基础吃了好多亏.总是很喜欢去看那些高大上的东西,却忽略了最基本的东西.然后会错误的以为自己懂的很多,但是其实是沙堆中筑高台,知道很多高大上的架构,但是基础的东西却不太了解.我觉 ...

  8. (shell脚本编程)linux如何利用脚本执行多条命令以及linux如何执行定时任务

    文章目录 shell脚本编程 条件语句 脚本执行多条命令 执行定时任务 本文着重于提高我们的生产力,所以将这几个作为了一个专题. shell脚本编程 脚本中不同语句用分号隔开,和c语言一样. for, ...

  9. spring框架使用Quartz执行定时任务实例详解

    版权声明:本文为博主原创文章,如需转载,请标明出处. https://blog.csdn.net/alan_liuyue/article/details/80382324 Quartz简介 1.Qua ...

最新文章

  1. 算法(掘金上经典的文档)
  2. 敏捷开发第二阶段个人(二)
  3. python 开发gui浏览器_Python编程之gui程序实现简单文件浏览器代码
  4. 11种必知的word embeddings模型
  5. 同时绑定onpropertychange 和 oninput 事件,实时检测 input、textarea输入改变事件,支持低版本IE,支持复制粘贴...
  6. 使用Java快速入门的Apache Thrift
  7. android 解析错误 真机,AndroidStudio使用真机调试时出的一些bug
  8. html的3d旋转木马插件,纯js超酷3D旋转木马特效插件
  9. 使用Spring的AbstractRoutingDataSource实现多数据源切换
  10. Win7系统能用一键装机的方式安装win10吗?
  11. 提权、渗透、经验、技巧总结大全三
  12. 高通量DNA测序数据的生物信息学方法
  13. LayoutInflater.inflate()方法的深入理解
  14. 在数据库中存储IP地址
  15. 给猜字游戏增加难度设置
  16. 学习记录:调用TFTLCD液晶屏
  17. 26、使用友善NanoPi NEO和外设硬件实现语音唤醒功能、目标检测功能、语音播报功能
  18. mysql 简述pk uk fk 的区别和对数据库性能的影响_SQL Server 数据库中PK,UK, DF, CK, FK是什么意思?...
  19. 京东技术助力十余省抗击疫情 应急资源平台已提供超6.6亿件抗疫物资
  20. python经典案例:64格棋盘与麦粒

热门文章

  1. WDA 程序文本翻译OTR
  2. javaScript设计模式之常用工厂模式
  3. 几个常用方法有效优化ASP.NET的性能
  4. 布局new操作符引发的有关析构函数的探索与总结
  5. 一些实用的JS代码。
  6. MySQL数据库安装Version5.7
  7. 数仓中的星型模型和雪花模型
  8. vue-cli4.0+Echarts 3D
  9. python步态识别算法_译 | GaitSet:将步态作为序列的交叉视角步态识别(一)
  10. python 状态模式_使用状态模式自由切换登录状态