定时器Timer使用
一、定时器Timer基本使用
- Timer timer = new Timer(); timer.schedule(TimerTask, Date);,任务需要用TimerTask封装,重写TimerTask中的run方法
- Timer timer = new Timer(boolean);,传值true表示Timer线程为守护线程,主线程结束跟随结束。默认值为false,主线程结束任务执行完毕仍未结束线程。
- 当前时间在Date之后则立即执行,在Date之前则等到指定时间后执行
- 同一Timer调用的不同定时任务按顺序执行
- 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) 方法
- 传入period表示每隔一段时间执行一次
- date在当前时间之后则按指定时间执行,在当前时间之前则立即执行
- 任务执行时间过长造成后续任务延时,后续任务按队列执行,例如定时每2s执行一次但是任务执行需要5s,则以后每5s执行一次。
- TimerTask.cancel()方法,将自身从任务队列中清除,其他任务不受影响。
- Timer.cancel()方法,将timer中的任务队列全部清空。注意有可能不会被清除,因为Timer.cancel()方法可能没有抢到任务队列queue的锁
schedule(TimerTask task, long delay) 延时执行
- 以当前时间为基准在delay毫秒后执行
- 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)对比
- 若任务不延时,传入Date时,上次任务执行开始时间+period为本次任务开始时间。传入long时,上次任务开始时间+period为本次任务的开始时间。scheduleAtFixedRate类似
- 若任务延时,传入Date时,上次任务结束时间+period为本次任务开始时间。传入long时,上次任务结束时间+period为本次任务的开始时间。scheduleAtFixedRate类似
scheduleAtFixedRate与schedule区别
- schedule不具有追赶性:当任务延时时间很长中间任务未被执行的任务就被取消掉不执行了。
- 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使用相关推荐
- 【Android 异步操作】Timer 定时器 ( Timer 与 TimerTask 基本使用 | Timer 定时器常用用法 | Timer 源码分析 )
文章目录 一.Timer 定时器基本使用 二.Timer 定时器常用用法 三.Timer 源码分析 四.Timer 部分源码注释 五.源码及资源下载 参考文档 : Timer 定时器 API 文档 T ...
- Java定时器Timer
Java定时器Timer 在JDK库中,Timer类主要负责计划任务的功能,也就是在指定的时开始执行某一个任务.Timer类的主要作用就是设置计划任务,但封装任务的类却是TimerTask类,执行计划 ...
- python定时器 是线程吗_python线程定时器Timer(32)
相对前面几篇python线程内容而言,本片内容相对比较简单,定时器 – 顾名思义,必然用于定时任务. 一.线程定时器Timer原理 原理比较简单,指定时间间隔后启动线程!适用场景:完成定时任务,例如: ...
- python定时器timer_python通过线程实现定时器timer的方法
本文实例讲述了python通过线程实现定时器timer的方法.分享给大家供大家参考.具体分析如下: 这个python类实现了一个定时器效果,调用非常简单,可以让系统定时执行指定的函数 下面介绍以thr ...
- 第5章 定时器Timer
第5章 定时器Timer 标签: Java多线程编程 <Java多线程编程核心技术> 个人笔记 第5章 定时器Timer 定时器Timer的使用 方法scheduleTimerTask t ...
- python中实现定时器Timer
实现定时器最简单的办法是就是循环中间嵌time.sleep(seconds), 这里我就不赘述了 # encoding: UTF-8 import threading #Timer(定时器)是Thre ...
- Python 线程定时器 Timer - Python零基础入门教程
目录 一.Python 线程定时器 Timer 原理 二.Python 线程定时器 Timer 使用 三.Python 线程定时器 Timer 总结 四.猜你喜欢 零基础 Python 学习路线推荐 ...
- 定时器Timer的实现
定时器Timer的实现 定时器在实际项目中会用的比较平凡.因此,本文首先介绍定时器Timer的windows版本,跨平台的定时器将在下一篇文章中介绍.它们的源代码均用C++编写.源代码详见:https ...
- Java定时器Timer学习之一
2019独角兽企业重金招聘Python工程师标准>>> 种类: 接通延时型定时器:接通延时型定时器是各种PLC(可编程控制器)中最常见最基本的定时器,这种定时器在Siemens的PL ...
- python threading模块中的timer_threading中定时器Timer方法
threading中定时器Timer 定时器功能:在设置的多少时间后执行任务,不影响当前任务的执行 常用方法 from threading import Timer t = Timer(interva ...
最新文章
- /* * 编程第二题(20分): 	一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第十次落地时,共经过多少米?第十次反弹多高? */
- 计算机word表格居中,word表格居中怎么弄
- 3 镜像仓库Harbor安装
- C语言中变量的链接属性
- wpf 代码获取contextmenu_[C#] 转:在WPF里面获取右键弹出菜单(ContextMenu)的鼠标点击源(Owner)控件...
- 谈谈我的session跨域处理方法
- 剑指offer——面试题34:丑数
- 具体案例 快速原型模型_3D快速成型技术需要传统加工方法30%~50%的工时和20%~35%的成本,可以如此地降低成本?...
- 真北方向、坐标北向以及磁北向
- idea添加scala环境_Scala篇:Scala环境及IDEA配置
- GeoServer style(sld)中文乱码解决方法
- 想把手机内容投屏到电脑 并且可以用电脑控制手机怎么办,很简单
- 实用工具(锐捷睿易篇)
- 计算机二级两个控件之间求偶,求,全国计算机等级考试二级java历年试题及答案合集,还有上机考试真题?...
- python修改表格居中_Python使用openpyxl对xlsx表格合并单元格、设置单元格样式的操作...
- 红米手机4完整刷成开发版获得root权限的步骤
- mysql数据完整性实验报告,数据库原理实验报告(Mysql)
- EXCEL中条件格式中如果为真则停止的设置
- 阿里国际站如何有效覆盖关键词+关键词推广评分详解
- 2020,开启我人生的新篇章。