java中timer类包_Java~util包中Timer的使用, 演示cancel方法 和 对比schedule和scheduleAtFixedRate方法...

Timer

Timer类的主要作用就是设置计划任务,但封装任务的类却是TimerTask类

执行计划任务的代码要放人TimerTask的子类中,因为TimerTask是一个抽象类。而且要重写其run方法 因为这是一个抽象方法.

59ad99522bf96313e6a03255c5e33c08.png

1abce954404ff72bef3eae5d77f164ba.png

常见问题

任务执行完了, 但进程并没有销毁,

45f3cf83a8300ed82658912d34204f12.png

通过源码查看构造方法可以得知,创建一个 Timer就是启动一个新的线程,这个新启动的线程并不是守护线程,它一直在运行。

如果想要将其变为守护线程就在初始化timer的时候传入一个true

public class Demo1 {

public static void main(String[] args) throws InterruptedException {

Timer timer = new Timer(true);

Task task = new Task();

timer.schedule(task, 1000);

Thread.sleep(1000);

}

}

class Task extends TimerTask {

@Override

public void run() {

System.out.println("Listen");

}

}

如果我们定的执行任务的时间在未来, 这种会在将来正常执行, 如果我们定的任务在过去, 那么这个任务就立刻执行.

TimerTask是以队列的方式一个一个被顺序执行的,所以执行的时间有可能和预期的时间不一致,因为前面的任务有可能消耗的时间较长,则后面的任务运行的时间也会被延迟。

方法schedule(Timer Task task, long delay)

该方法的作用是以执行schedule(TimerTasktask,long delay)方法当前的时间为参考时间,在此时间基础上延迟指定的毫秒数delay后执行一次TimerTask任务。

演示

public class Demo2 {

public static void main(String[] args) {

Timer timer = new Timer();

TimerTask timerTask = new TimerTask() {

@Override

public void run() {

System.out.println("执行时间: " + new Date().toString());

System.out.println("l love listen");

}

};

System.out.println("此时: " + new Date().toString());

timer.schedule(timerTask, 1000);

}

}

93fa6d1dfa7dbef9414fcaacfe9fc4ae.png

方法schedule(Timer Task task, long delay, long period)

该方法的作用是以执行schedule ( TimerTask task, long delay, long period)方法当前的时间为参考时间,在此时间基础上延迟指定的毫秒数delay,再以某一间隔period时间无限次数地执行某一任务。

演示

public class Demo3 {

public static void main(String[] args) {

Timer timer = new Timer();

TimerTask timerTask = new TimerTask() {

@Override

public void run() {

System.out.println("执行时间" + new Date().toString());

System.out.println("l love listen");

}

};

timer.schedule(timerTask, 1000, 1000);

}

}

6070aa2a189ff282a0f2251a1aa63805.png

凡是使用方法中带有period参数的,都是无限循环执行TimerTask中的任务。

cancel方法

TimerTask类的cancel()方法

TimerTask类中的cancel方法的作用是将自身从任务队列中清除。

public class Demo4 {

public static void main(String[] args) {

Timer timer = new Timer();

TimerTask timerTask = new TimerTask() {

volatile int count = 0;

@Override

public void run() {

System.out.println("执行时间" + new Date().toString());

System.out.println("l love listen");

count++;

if (count == 3) {

System.out.println("执行cancel");

this.cancel();

}

}

};

timer.schedule(timerTask, 1000, 1000);

}

}

c8a1fa9ba3bc8f3383176c7a1b349992.png

TimerTask类的cancel()方法是将自身从任务队列中被移除,其他任务不受影响。

Timer类的cancel()方法

和TimerTask类中的cancel() 方法清除自身不同,Timer 类中的cancel()方法的作用是将任务队列中的全部任务清空。

public class Demo5 {

public static void main(String[] args) {

Timer timer = new Timer();

//创建俩个task

TimerTask timerTask = new TimerTask() {

volatile int count = 0;

@Override

public void run() {

System.out.println("A 执行时间" + new Date().getTime());

System.out.println("l love listen");

count++;

if (count == 3) {

System.out.println("执行timer.cancel");

timer.cancel();

}

}

};

TimerTask timerTask1 = new TimerTask() {

@Override

public void run() {

System.out.println("B 执行时间" + new Date().getTime());

System.out.println("l love swy");

}

};

timer.schedule(timerTask, 1000, 1000);

timer.schedule(timerTask1, 500, 500);

}

}

b3dba8e23151dd010bd31181090406fd.png

全部任务都被清除,并且进程被销毁,按钮由红色变成灰色。

timer.cancel的最常见一个问题

Timer类中的cancel()如果执行了, 表示这个定时器就用不成了, 所以即使你再往定时器里加任务, 也是不能执行的

public class Demo6 {

public static void main(String[] args) {

Timer timer = new Timer();

//创建俩个task

TimerTask timerTask = new TimerTask() {

@Override

public void run() {

System.out.println("A 执行时间" + new Date().getTime());

System.out.println("l love listen");

}

};

TimerTask timerTask1 = new TimerTask() {

@Override

public void run() {

System.out.println("B 执行时间" + new Date().getTime());

System.out.println("l love swy");

}

};

while (true) {

timer.schedule(timerTask, 1000, 1000);

timer.schedule(timerTask1, 500, 500);

timer.cancel();

}

}

}

f7d57f6a0339dc541385edc7b8606347.png

对比schedule和scheduleAtFixedRate方法

方法schedule和方法scheduleAtFixedRate都会按顺序执行,所以不要考虑非线程安全的情况。方法schedule和scheduleAtFixedRate主要的区别只在于不延时的情况。使用schedule方法:如果执行任务的时间没有被延时,那么下一次任务的执行时间参考的是上一次任务的“开始"时的时间来计算。

使用scheduleAtFixedRate方法:如果执行任务的时间没有被延时,那么下一次任务的执行时间参考的是上一次任务的“结束”时的时间来计算。

延时的情况则没有区别,也就是使用schedule或scheduleAtFixedRate方法都是如果执行任务的时间被延时,那么下一次任务的执行时间参考的是上一次任务“结束”时的时间来计算。

schedule方法不具有追赶性, 而scheduleAtFixedRate具有追赶性, 追赶性就是如果我们定的是循环执行的任务, 且定的任务在将来, 那么使用schedule不会弥补时间上的空缺, 而使用scheduleAtFixedRate会补充执行, 把欠下的都执行回来.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

scala java抽象理解_Scala之类、特质和抽象类

1. 类1.1. 类的定义类的定义://定义Point类,构造器带有两个参数class Point(var x: Int, var y: Int) {//无返回值的类方法def move(dx: Int, dy: Int): Unit {x x dxy y dy}//没有参数但是返回值为String类型的重写方法override def toString: Str…

centos eclipse java_CentOS7 安装 Eclipse

咳咳, 虽然大神的 Linux 都是命令行的, 但是谁让 LZ 是 LJ, 桌面开俩终端不觉得更好么。。。CentOS7 安装 Eclipse, 比在 Window 系统下安装 Eclipse 要复杂得多。。参考 : https://segmentfault.com/a/11900000026517…

iap java md5_苹果应用内支付(iOS IAP)的流程与常用攻击方式

1. 客户端直接verify苹果的receipt 如果verify成功 自行发放商品2. 客户端将receipt传给server,由server进行验证并发放商品按照安全性原则, 客户端的所有信息都是不可信的,而且支付是业务中的核心模块,所以应该选择第二种。下面简要介绍下,第二种方式的简单流程。1. 客户端支付…

java opencv orb_opencv python ORB算法

理论ORB(Oriented FAST and Rotated BRIEF)是一种快速特征点提取和描述的算法,这个算法是由Ethan Rublee, Vincent Rabaud, Kurt Konolige以及Gary R.Bradski在2011年一篇名为“ORB:An Efficient Alternative to SIFTor SURF”的文章中提出.ORB算法分为两部分&#…

php中define的参数_php中define的用法有哪些

php中define的用法:1、【define()】函数定义一个常量;2、定义常量名称及值,代码为【define(name,value,case_insensitive)】;3、定义一个大小写敏感的常量。php中define的用法:1、define()函数理解1define()函数定义一…

php 判断是否文件,php 判断是否一个文件的函数is_file()应用举例

php手册中关于此函数的介绍。php is_file 判断是否为文件的代码is_file() 函数检查指定的文件名是否是正常的文件。is_file — Tells whether the filename is a regular file用法bool is_file ( string $filename ) $file 为必选参数如果文件存在且为正常的文件则返回 TRUE。例…

php 登陆微博,PHP调用微博接口实现微博登录的方法示例

在平时项目开发过程中,除了注册本网站账号进行登录之外,还可以调用第三方接口进行登录网站。这里以微博登录为例。微博登录包括身份认证、用户关系以及内容传播。允许用户使用微博帐号登录访问第三方网站,分享内容,同步信息。1、首…

php计算结果排序,php-按从数组计算出的值对数组进行排序

我从阵列中的数据库中获得了用户的经纬度我有我的经纬现在,我要计算距离并使用该距离对数据库中的用户进行排序$mylat $_SESSION[lat];$mylng $_SESSION[lng];$statement $pdo->prepare("SELECT * FROM users");$statement->execute();$users $statement-&…

php获取音频的时长,PHP编程获取音频文件时长的方法【基于getid3类】

本文实例讲述了PHP编程获取音频文件时长的方法。分享给大家供大家参考,具体如下:问题:昨天在新增论坛功能的时候,移动端显示音频文件需要知道是多长的音频;具体解决方案如下:首先就是数据库中增加保存音频文…

php strlen ctf,CTF中的PHP反序列化漏洞简单分析

[PHP] 纯文本查看 复制代码<?php class start_gg{public $mod1;public $mod2;public function __construct() #把$mod1赋值为Call类对象{$this->mod1 new Call();}public function __destruct(){$this->mod1->test1();}}class Call{public $mod1;…

2017php行情,2017年蔬菜行情特点及未来蔬菜价格走势分析

2017年蔬菜行情整体特点一、菜价走势前期低迷&#xff0c;后期逐渐回升&#xff1a;1.2017年1&#xff5e;10月的蔬菜平均价处于近3年同期的最低点&#xff1b;2.1&#xff5e;5月菜价创近5年同期最低。南方产区的实心菜花、散菜花、西兰花、团生菜、白萝卜、大白菜&#xff0c…

php毕设,php毕设

于不要钱&#xff01;这里值得提一句&#xff0c;必须是通过牛客网链接新注册的华为云账号&#xff0c;并且要实名认证&#xff0c;24岁以下自动会认定学生身份&#xff0c;这样才可以参加本次活动正好毕设的项目要用到云服务器&#xff0c;这个活动出现的太及时了&#xff0c;…

java实现layui静态表格分页,layui——数据表格分页实例

layui实现数据表格table分页功能&#xff0c;异步加载&#xff0c;表格渲染。总体流程&#xff1a;layui的数据表格设置分页参数开启可以从请求中看到如下图&#xff0c;所以我们需要在后端控制器接收分页数据page和limit进行操作&#xff0c;下面直接上代码分页链接框架&#…

php去掉数字前的符号,php导出excel如何处理使得表格数字值前面的0不被去掉

“首先&#xff0c;我们了解一下excel从web页面上导出的原理。当我们把这些数据发送到客户端时&#xff0c;我们想让客户端程序(浏览器)以excel的格式读取它&#xff0c;所以把mime类型设为&#xff1a;application/vnd.ms-excel&#xff0c;当excel读取文件时会以每个cell的格…

php繁体输出,PHP输出控制功能在简繁体转换中的应用

概要&#xff1a;本文对PHP的输出控制功能进行了简单介绍并对其在简繁体转化中的应用给出了具体思路和实例一 PHP 输出控制功能介绍PHP作为当今流行的脚本语言之一&#xff0c;具有编写简便&#xff0c;执行速度快&#xff0c;扩充性好等优点。PHP的输出信息控制函数可以让你控…

php专家预约系统设计,基于ThinkPHP框架的IT服务预约系统的设计与实现

2014 年 11 月 中国高等教育学会教育信息化分会第十二次学术年会论文集 1 文章编号&#xff1a;1000-5641(2014)00— 基于ThinkPHP 框架的IT 服务预约系统的设计 与实现 何秀全 (上海外国语大学信息技术中心&#xff0c;上海 200083) 摘要&#xff1a;一些高校 IT 部门需要提供…

mysql多列 groupby,MySQL多表查询之GroupBy

需求&#xff1a;根据主键id查询到该顾客最近的一次消费记录SQL代码如下&#xff1a;SELECTcbi.id,cbi.mob,cbi.identity_card,bcil.remark,bcil.orders_no,bcil.brand_no,bcil.with_date,bcil.scoreFROMcustomer_base_info cbiLEFT JOIN(SELECTA.customer_id,A.with_date,A.re…

java j2ssh替代jsch,jsch设置ssh协商算法优先级

最近接触jsch这个包&#xff0c;发现在默认情况下&#xff0c;jsch登录ssh的时候&#xff0c;协商的加密算法和mac算法都不是最高优先级的&#xff0c;这个时候需要手动配置一下算法列表&#xff0c;将强度高的调整在算法列表的前面&#xff0c;这样ssh链接的时候&#xff0c;如…

php验证码图片乱码,php ,验证码图片,乱码

找不出哪里出错了&#xff0c;但是预览时就是会出现一大堆乱码回复讨论(解决方案)乱码是浏览器显示了字符而不是图片么&#xff1f;关闭浏览器重新访问这个地址试试。如果还不行&#xff0c;应该是header的问题。图片输出&#xff0c;最好用UTF-8字符集&#xff0c;因为有可能会…

java 截取汉字首字母,java 取汉字首字母

有时候&#xff0c;可能会有一些类似这样的需求&#xff1a;对于这样的效果&#xff0c;我们可以有类似这样的解决方案&#xff1a;package bys.utils;import java.io.UnsupportedEncodingException;/*** Created by toutou on 2014/2/21*/public class ChineseCharacterHelper…