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,一经查实,立即删除!

相关文章

centos eclipse java_CentOS7 安装 Eclipse

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

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调用微博接口实现微博登录的方法示例

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

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

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

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

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

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

需求:根据主键id查询到该顾客最近的一次消费记录SQL代码如下: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这个包,发现在默认情况下,jsch登录ssh的时候,协商的加密算法和mac算法都不是最高优先级的,这个时候需要手动配置一下算法列表,将强度高的调整在算法列表的前面,这样ssh链接的时候,如…

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

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

linux操作系统网络,网络安装linux操作系统

网络安装安装的准备首先配仓库然后需要安装的服务Yun y install tftp-serverYum y install dhcp开始实验配仓库安装tfpt包并进行配置Tftp-server dhcp tftp后,会在/var/lib/tftpboot这个文件,这个文件是作为linux安装的引导文件,将/mnt/isoli…

Linux使用ftp传输10g的文件,Ubuntu 16.04 安装ftp服务器传输文件

最近在搞深度学习,老师比较宝贝他的服务器,要求我以后负责管理服务器。往后所有要使用服务器的人都必须向我申请账号,然后只允许客户端访问,使用文件传输软件传输文件。像我这样一个Linux菜逼,这种要求不是赶鸭子上架嘛…

linux创建文件内容三行,shell之创建文件及内容的方法示例

shell之创建文件夹:[rootvbox-nginx shell_command]# vi ./mkdir.sh#!/bin/shparentDir"/media/sf_Project/self/smarty-frame/application/$1"fileName$2dirAndName$parentDir/$fileNameif [ ! -d "$dirAndName" ];thenmkdir $dirAndNameecho …

linux设备模型的主要功能,Linux设备模型(3)

Linux设备模型(3)_Uevent作者:蜗蜗 发布于:2014-3-10 20:39分类:统一设备模型1. Uevent的功能Uevent是Kobject的一部分,用于在Kobject状态发生改变时,例如增加、移除等,通知用户空间程序。用户空间程序收到…

lua_path环境变量设置linux,ubuntu16.04安装lua环境

1.官网下载源码 https://www.lua.org/download.htmlcurl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gztar zxf lua-5.3.5.tar.gzcd lua-5.3.5make linux test2.安装中报错lua.c:82:31: fatal error: readline/readline.h: 没有那个文件或目录compilation terminated.: recip…

皮尔洛和c罗讲什么语言,皮尔洛:如果我跟C罗是队友 我可能能成历史助攻王

皮尔洛:欧冠夺冠热门不包含皇马腾讯体育11月2日讯 近日皮尔洛在接受媒体采访时表示,本赛季欧冠的争夺将会十分激烈,除了尤文外,有四支球队也是欧冠桂冠有利的争夺者,但并不包括卫冕冠军皇马。另外皮尔洛还表示&#xf…

android 调用系统短信接口开发,聚合数据Android SDK 短信api接口验证演示示例

1.到libs聚合SDK是聚合数据平台,为移动开发者提供的免费数据接口.使用前请先到聚合平台(http://www.juhe.cn/)注册,申请相关数据.2.下载聚合数据SDK,将开发包里的smscaptcha_sdk_v_1_1.jar拷贝到libs根目录下,将libJuheSDK_v_1_0.so拷贝到libs\armeabi目录下,如图:3…

代码混淆android.mk,利用ollvm进行代码混淆

OLLVM简介OLLVM(Obfuscator-LLVM)是瑞士西北应用科技大学于2010年6月份发起的一个项目,该项目旨在提供一套开源的针对LLVM的代码混淆工具,以增加对逆向工程的难度。OLLVM是基于LLVM实现的,LLVM是一个编译器框架,它也采用经典的三段…

鸿蒙系统的适配国产手机,真正的好消息!其它国产机,也在适配华为鸿蒙系统...

众所周知,据华为消费者业务软件部总裁王成录的说法,今年6月初,华为手机就能全面升级鸿蒙2.0,迟到近两年的、真正的“一夜之间就可以替换掉安卓”。而近日,又传出了真正的好消息,那就是其它国产手机厂商&…

三星s4 android 6.0吗,快了 三星手机适配Android 6.0时间公布

快了 三星手机适配Android 6.0时间公布2016年01月26日 00:04作者:董岩编辑:董岩文章出处:泡泡网原创分享作为全球范围内无可争议的安卓手机巨头之一,三星在为其旗下手机适配安卓新系统方面历来算是相当上心的一个厂家。日前就已经…

xrdpdf卡片在哪可下载_暑假学习英语字母,就是这样简单(附可打印字母卡下载)...

英语字母是所有英语学习的基础,所以,要想学好英语,第一步,必须是学好字母,为后面的更深层次的学习打下坚实的根基。今天,我们给大家分享最全面的英文字母学习法,建议收藏,文章最后附…