一、定时器Timer基本使用

  1. Timer timer = new Timer(); timer.schedule(TimerTask, Date);,任务需要用TimerTask封装,重写TimerTask中的run方法
  2. Timer timer = new Timer(boolean);,传值true表示Timer线程为守护线程,主线程结束跟随结束。默认值为false,主线程结束任务执行完毕仍未结束线程。
  3. 当前时间在Date之后则立即执行,在Date之前则等到指定时间后执行
  4. 同一Timer调用的不同定时任务按顺序执行
  5. Timer可能会延时执行,使用同一个Timer调用schedule()方法,第一个线程执行时间较长,等第二个执行时已经过了预设时间,立即执行。

import java.util.*;class MyTask extends TimerTask {@Overridepublic void run() {System.out.println("MyTask运行时间:" + new Date());try {Thread.sleep(20000);} catch (InterruptedException e) {e.printStackTrace();}}
}public class StudyThreads01Timer用法 {public static void main(String[] args) {System.out.println("当前时间:" + new Date());// 设置运行时间,若运行时间在当前时间之前则立即执行,否则到指定时间后执行Calendar calendar = new GregorianCalendar();calendar.add(Calendar.SECOND, 5);Date runDate = calendar.getTime();MyTask myTask = new MyTask();calendar.add(Calendar.SECOND,10);Date runDate2 = calendar.getTime();MyTask myTask2 = new MyTask();System.out.println("任务1计划时间:"+runDate);System.out.println("任务2计划时间:"+runDate2);// 创建Timer对象,可传值Boolean 表示是否为守护线程(主线程结束跟随结束)// 不是守护线程主线程结束 定时任务线程仍不会结束。是守护线程时不管定时任务线程是否执行都会结束Timer timer = new Timer();timer.schedule(myTask, runDate);Timer timer2 = new Timer();timer2.schedule(myTask2 , runDate2);}
}

二、schedule(TimerTask task, Date firstTime, long period) 方法

  1. 传入period表示每隔一段时间执行一次
  2. date在当前时间之后则按指定时间执行,在当前时间之前则立即执行
  3. 任务执行时间过长造成后续任务延时,后续任务按队列执行,例如定时每2s执行一次但是任务执行需要5s,则以后每5s执行一次。
  4. TimerTask.cancel()方法,将自身从任务队列中清除,其他任务不受影响。
  5. Timer.cancel()方法,将timer中的任务队列全部清空。注意有可能不会被清除,因为Timer.cancel()方法可能没有抢到任务队列queue的锁

schedule(TimerTask task, long delay) 延时执行

  1. 以当前时间为基准在delay毫秒后执行
  2. schedule(TimerTask task, long delay, long period) 以当前时间为基准在delay毫秒后执行,每period时间执行一次

schedule(TimerTask task, long delay, long period)与schedule(TimerTask task, Date date, long period)与scheduleAtFixedRate(TimerTask task, Date date, long period)与scheduleAtFixedRate(TimerTask task, Date date, long period)对比

  1. 若任务不延时,传入Date时,上次任务执行开始时间+period为本次任务开始时间。传入long时,上次任务开始时间+period为本次任务的开始时间。scheduleAtFixedRate类似
  2. 若任务延时,传入Date时,上次任务结束时间+period为本次任务开始时间。传入long时,上次任务结束时间+period为本次任务的开始时间。scheduleAtFixedRate类似

scheduleAtFixedRate与schedule区别

  1. schedule不具有追赶性:当任务延时时间很长中间任务未被执行的任务就被取消掉不执行了。
  2. scheduleAtFixedRate具有追赶性,当任务延时时间很长中间任务会进行补充行执行。

scheduleAtFixedRate测试代码:

package com.chapter05;import java.util.*;class MyTask02 extends TimerTask {@Overridepublic void run() {System.out.println("MyTask运行时间:" + new Date());}
}public class StudyThreads02scheduleAtFixedRate方法 {public static void main(String[] args) {Calendar calendar = Calendar.getInstance();calendar.add(Calendar.SECOND, -20);Date runDate = calendar.getTime();System.out.println("当前时间:" + new Date());System.out.println("计划执行时间:" + runDate);MyTask02 myTask02 = new MyTask02();Timer timer = new Timer();timer.scheduleAtFixedRate(myTask02, runDate, 2000);}
}

运行结果:

定时器Timer使用相关推荐

  1. 【Android 异步操作】Timer 定时器 ( Timer 与 TimerTask 基本使用 | Timer 定时器常用用法 | Timer 源码分析 )

    文章目录 一.Timer 定时器基本使用 二.Timer 定时器常用用法 三.Timer 源码分析 四.Timer 部分源码注释 五.源码及资源下载 参考文档 : Timer 定时器 API 文档 T ...

  2. Java定时器Timer

    Java定时器Timer 在JDK库中,Timer类主要负责计划任务的功能,也就是在指定的时开始执行某一个任务.Timer类的主要作用就是设置计划任务,但封装任务的类却是TimerTask类,执行计划 ...

  3. python定时器 是线程吗_python线程定时器Timer(32)

    相对前面几篇python线程内容而言,本片内容相对比较简单,定时器 – 顾名思义,必然用于定时任务. 一.线程定时器Timer原理 原理比较简单,指定时间间隔后启动线程!适用场景:完成定时任务,例如: ...

  4. python定时器timer_python通过线程实现定时器timer的方法

    本文实例讲述了python通过线程实现定时器timer的方法.分享给大家供大家参考.具体分析如下: 这个python类实现了一个定时器效果,调用非常简单,可以让系统定时执行指定的函数 下面介绍以thr ...

  5. 第5章 定时器Timer

    第5章 定时器Timer 标签: Java多线程编程 <Java多线程编程核心技术> 个人笔记 第5章 定时器Timer 定时器Timer的使用 方法scheduleTimerTask t ...

  6. python中实现定时器Timer

    实现定时器最简单的办法是就是循环中间嵌time.sleep(seconds), 这里我就不赘述了 # encoding: UTF-8 import threading #Timer(定时器)是Thre ...

  7. Python 线程定时器 Timer - Python零基础入门教程

    目录 一.Python 线程定时器 Timer 原理 二.Python 线程定时器 Timer 使用 三.Python 线程定时器 Timer 总结 四.猜你喜欢 零基础 Python 学习路线推荐 ...

  8. 定时器Timer的实现

    定时器Timer的实现 定时器在实际项目中会用的比较平凡.因此,本文首先介绍定时器Timer的windows版本,跨平台的定时器将在下一篇文章中介绍.它们的源代码均用C++编写.源代码详见:https ...

  9. Java定时器Timer学习之一

    2019独角兽企业重金招聘Python工程师标准>>> 种类: 接通延时型定时器:接通延时型定时器是各种PLC(可编程控制器)中最常见最基本的定时器,这种定时器在Siemens的PL ...

  10. python threading模块中的timer_threading中定时器Timer方法

    threading中定时器Timer 定时器功能:在设置的多少时间后执行任务,不影响当前任务的执行 常用方法 from threading import Timer t = Timer(interva ...

最新文章

  1. /* * 编程第二题(20分): 一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第十次落地时,共经过多少米?第十次反弹多高? */
  2. 计算机word表格居中,word表格居中怎么弄
  3. 3 镜像仓库Harbor安装
  4. C语言中变量的链接属性
  5. wpf 代码获取contextmenu_[C#] 转:在WPF里面获取右键弹出菜单(ContextMenu)的鼠标点击源(Owner)控件...
  6. 谈谈我的session跨域处理方法
  7. 剑指offer——面试题34:丑数
  8. 具体案例 快速原型模型_3D快速成型技术需要传统加工方法30%~50%的工时和20%~35%的成本,可以如此地降低成本?...
  9. 真北方向、坐标北向以及磁北向
  10. idea添加scala环境_Scala篇:Scala环境及IDEA配置
  11. GeoServer style(sld)中文乱码解决方法
  12. 想把手机内容投屏到电脑 并且可以用电脑控制手机怎么办,很简单
  13. 实用工具(锐捷睿易篇)
  14. 计算机二级两个控件之间求偶,求,全国计算机等级考试二级java历年试题及答案合集,还有上机考试真题?...
  15. python修改表格居中_Python使用openpyxl对xlsx表格合并单元格、设置单元格样式的操作...
  16. 红米手机4完整刷成开发版获得root权限的步骤
  17. mysql数据完整性实验报告,数据库原理实验报告(Mysql)
  18. EXCEL中条件格式中如果为真则停止的设置
  19. 阿里国际站如何有效覆盖关键词+关键词推广评分详解
  20. 2020,开启我人生的新篇章。

热门文章

  1. 常用的RAID模式及特点
  2. 安装fabric-2.2.0
  3. 电容6大特性参数,你知道几个?
  4. 85 数模 电动汽车目标客户销售策略研究(21 华数 C)
  5. 电脑文件误删除如何恢复?可以快速找回
  6. 制作一个用户头像选择器仿 WeGame
  7. win7计算机怎么优化驱动器,win7如何优化加速的12条技巧
  8. mysql按范围查找_Mysql实现按距离排序、范围查找
  9. 3DMAX打开模型一直未响应
  10. lambda-1-lambda简介