java 线程定时器_Java线程之Timer定时器

64d6d959a67d132118f09bb880e4aa6c.png

定时/计划功能主要使用的就是Timer对象,它在内部还是使用多线程的方式进行处理,所以它和线程技术还是有非常大的关联。

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

执行任务的时间晚于当前时间-----在未来执行的效果import java.util.Date;

import java.util.TimerTask;

public class MyTask extends TimerTask{

@Override

public void run() {

System.out.println("任务执行了, 时间为:" + new Date());

}

}

public class Test1 {

public static void main(String[] args){

System.out.println("当前时间为: " + new Date());

Calendar calendarRef = Calendar.getInstance();

calendarRef.add(Calendar.SECOND, 10);

Date runDate = calendarRef.getTime();

MyTask task = new MyTask();

// 查看Timer构造方法,创建一个Timer就是启动一个新的线程

Timer timer = new Timer();

timer.schedule(task, runDate); // 定时器在某个时间(runDate)执行某个任务(task)

}

}

免费在线学习视频分享:java视频

Timer中允许有多个TimerTask任务及延时的测试

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

import java.util.TimerTask;

public class MyTaskA extends TimerTask{

@Override

public void run() {

try {

System.out.println("A begin timer, 时间为:" + new Date());

Thread.sleep(20000);

System.out.println("A end timer, 时间为:" + new Date());

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

import java.util.Date;

import java.util.TimerTask;

public class MyTaskB extends TimerTask{

@Override

public void run() {

System.out.println("B begin timer, 时间为:" + new Date());

System.out.println("B end timer, 时间为:" + new Date());

}

}

import java.util.Calendar;

import java.util.Date;

import java.util.Timer;

public class Test1 {

public static void main(String[] args){

System.out.println("当前时间为: " + new Date());

Calendar calendarRef1 = Calendar.getInstance();

Date runDate1 = calendarRef1.getTime();

System.out.println("A计划时间为: " + runDate1);

Calendar calendarRef2 = Calendar.getInstance();

calendarRef2.add(Calendar.SECOND, 10);

Date runDate2 = calendarRef2.getTime();

System.out.println("B计划时间为: " + runDate2);

MyTaskA task1 = new MyTaskA();

MyTaskB task2 = new MyTaskB();

Timer timer = new Timer();

timer.schedule(task1, runDate1); // 定时器在某个时间(runDate)执行某个任务(task)

timer.schedule(task2, runDate2);

}

}

schedule(TimerTask task, Date firstTime, long period)

该方法的作用是在指定的日期之后按指定的间隔周期,无限循环地执行某一任务。import java.util.Date;

import java.util.TimerTask;

public class MyTask extends TimerTask{

@Override

public void run() {

System.out.println("任务开始: "+new Date());

System.out.println("mytask...");

System.out.println("任务结束: "+new Date());

}

}

import java.util.Calendar;

import java.util.Date;

import java.util.Timer;

public class Run {

public static void main(String[] args){

System.out.println("当前时间为:"+new Date());

Calendar c = Calendar.getInstance();

c.add(Calendar.SECOND, 10);

Date runDate1 = c.getTime();

System.out.println("计划时间为:"+runDate1);

MyTask myTask = new MyTask();

Timer timer = new Timer();

timer.schedule(myTask, runDate1, 10000);

}

}

TimerTask类的cancel()方法

TimerTask类中的cancel()方法的作用是将自身从任务队列中进行清除.import java.util.Date;

import java.util.TimerTask;

public class MyTaskA extends TimerTask{

@Override

public void run() {

System.out.println("A run timer="+new Date());

this.cancel();

System.out.println("A任务自己移除自己");

}

}

import java.util.Date;

import java.util.TimerTask;

public class MyTaskB extends TimerTask{

@Override

public void run() {

System.out.println("B run timer="+new Date());

}

}

import java.util.Calendar;

import java.util.Date;

import java.util.Timer;

public class Run {

public static void main(String[] args){

System.out.println("当前时间为:"+new Date());

Calendar c = Calendar.getInstance();

Date runDate1 = c.getTime();

System.out.println("计划时间为:"+runDate1);

MyTaskA myTaskA = new MyTaskA();

MyTaskB myTaskB = new MyTaskB();

Timer timer = new Timer();

timer.schedule(myTaskA, runDate1, 4000);

timer.schedule(myTaskB, runDate1, 4000);

}

}

Timer的cancel()方法

和TimerTask类中的cancel()方法清除自身不同,Timer类中的cancel()方法作用是将任务队列中全部的任务进行清空。import java.util.Date;

import java.util.TimerTask;

public class MyTaskA extends TimerTask{

@Override

public void run() {

System.out.println("A run timer="+new Date());

this.cancel();

System.out.println("A任务自己移除自己");

}

}

import java.util.Date;

import java.util.TimerTask;

public class MyTaskB extends TimerTask{

@Override

public void run() {

System.out.println("B run timer="+new Date());

}

}

import java.util.Calendar;

import java.util.Date;

import java.util.Timer;

public class Run {

public static void main(String[] args){

System.out.println("当前时间为:"+new Date());

Calendar c = Calendar.getInstance();

Date runDate1 = c.getTime();

System.out.println("计划时间为:"+runDate1);

MyTaskA myTaskA = new MyTaskA();

MyTaskB myTaskB = new MyTaskB();

Timer timer = new Timer();

timer.schedule(myTaskA, runDate1, 4000);

timer.schedule(myTaskB, runDate1, 4000);

}

}

schedule(TimerTask task, long delay)

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

import java.util.TimerTask;

public class MyTask extends TimerTask{

@Override

public void run() {

System.out.println("A run timer="+new Date());

}

}

import java.util.Calendar;

import java.util.Date;

import java.util.Timer;

public class Run {

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

System.out.println("当前时间为:"+new Date());

Calendar c = Calendar.getInstance();

Date runDate1 = c.getTime();

System.out.println("计划时间为:"+runDate1);

MyTask myTask = new MyTask();

Timer timer = new Timer();

timer.schedule(myTask, 7000); // 计划任务延迟7秒后执行

Thread.sleep(10000);

timer.cancel();

}

}

更多相关文章教程推荐:java入门教程

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

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

相关文章

博客已经迁移到 http://imbotao.top 也会同步到这儿

完全是看到别人搭建的 hexo github Pages 博客界面很好看,很简洁,自己也喜欢折腾,就鼓捣了一个。 也在阿里云买了自己的域名,个人感觉在博客的样式和功能上花费了太多的时间,不过现在终于搞的差不多了,以后…

vscode 写vue 没有js提示_如何用VSCode实现一个vue.js项目?

1,新建项目打开Visual studio code打开一个你想要创建项目的文件夹打开集成终端:查看 –> 集成终端 或者直接按 ctrl\ 如果没有安装vue-cli,在终端输入:npm install \-g vue-cli全局安装vue-cli然后新建项目vue init webpack projectNamep…

python有没有类似unity3d_像web一样使用python

使用传统的web开发技术,也就是htmljs,然后搭配一个后端语言,已经成为当今web开发的固定模式了,为此也形成了众多的toolkit,譬如ror,django,各种js图形库更是玲琅满目,从非常大程度上也加速了开发过程.但传统web应用也非常自然地有一些诟病,有些特殊效果,c端能够轻而易举地完毕,…

邓白氏编码查询_外贸人常用查询工具汇总

外贸工具类网站FOB价格计算器http://bbs.fobshanghai.com/fobprice.htmCIF价格计算器http://www.easiertrade.com/public/cif.html?_1487894720000海关原产地证真伪查询https://dwz.cn/f3O8YGK6出口退税查询https://dwz.cn/kGWsBclu国家已正式于2018年11月1日起调整产品的出口…

超简单的走马灯效果

虽然走马灯的效果看起来很简单&#xff0c;网上也有很多的教程能够直接copy&#xff0c;然而还是第一次研究这个的实现方法。 先把div给定义出来&#xff0c;写好布局。 <div class"wrapper"><div id"box"><div>slide1</div><d…

winscp

简介&#xff1a;是linux的一个连接工具 1.winscp的下载&#xff1a;就会自动下载的了 2.安装配置&#xff1a; https://jingyan.baidu.com/article/6525d4b15bae6fac7d2e94a0.html 3.生成密钥&#xff1a; https://jingyan.baidu.com/article/ed2a5d1f377ccb09f6be178b.html 4…

gitlab-ee使用mysql_在 GitLab 我们是如何扩展数据库的

很长时间以来 GitLab.com 使用了一个单个的 PostgreSQL 数据库服务器和一个用于灾难恢复的单个复制。在 GitLab.com 最初的几年&#xff0c;它工作的还是很好的&#xff0c;但是随着时间的推移&#xff0c;我们看到这种设置的很多问题&#xff0c;例如&#xff0c;数据库长久处…

哈希表数据结构_Java数据结构哈希表如何避免冲突

前言一、哈希表是what&#xff1f;这是百度上给出的回答&#xff1a;简而言之&#xff0c;为什么要有这种数据结构呢&#xff1f;因为我们想不经过任何比较&#xff0c;一次从表中得到想要搜索的元素。所以就构造出来了哈希表&#xff0c;通过某种函数(哈希函数)使元素的存储位…

Python 高级网络操作 - Python Advanced Network Operations

1 Python 高级网络操作 - Python Advanced Network Operations2 3 Half Open Socket,4 一个单向的 socket 被称为 half open socket, 即数据只能在一个方向上传输.5 Half Open Socket 是通过在 socket 对象上调用 shutdown() 方法得到.6 shutdown 接收一个 numeric…

java getattribute为空_Java TransMeta.getAttribute方法代码示例

import org.pentaho.di.trans.TransMeta; //导入方法依赖的package包/类Overridepublic void getData( TransMeta transMeta ) throws KettleException {try {String serviceName transMeta.getAttribute( StreamingConst.STREAMING_GROUP, StreamingConst.STREAMING_SERVICE_…

python summary writer_tensorflow中summary操作

tf中 tensorboard 工具通过读取在网络训练过程中保存到本地的日志文件实现数据可视化&#xff0c;日志数据保存主要用到 tf.summary 中的方法。tf.summary中summary是tf中的一个py文件&#xff0c;位置在 /tensorflow/python/summary/ 文件夹下&#xff0c;提供了像tf.summary.…

10 3 java_10.3 UiPath如何调用Java

调用Java方法(Invoke Java Method)的介绍从Java Scope中的.jar加载的方法中调用指定的Java方法。并结果存储在变量中二、Invoke Java Method 在UiPath中的使用打开设计器, 在设计库中新建一个Sequence&#xff0c;为序列命名及设置Sequence存放的路径, 在Activities中搜索Java …

物联网python教程慕课_物联网技术(校慕课资源,物联网组)-中国大学mooc-题库零氪...

3. 智慧社区的部署3.1 IIS服务器安装随堂测验1、在安装IIS信息服务器时&#xff0c;我们应打开电脑控制面板中的哪个设置( )A、管理工具B、程序与功能C、Windows 防火墙D、操作中心2、在安装IIS服务器时&#xff0c;在widows功能下需要勾选以下哪几项 &#xff1f;( )A、Intern…

台达伺服电机选型手册_机械加工工艺师手册_打包下载

如何【设为星标★】&#xff0c;优先推送资料信息&#xff1f;Ta们都在看咱们&#xff1a;机械大佬群注意及时保存和下载&#xff0c;资料若失效请拉到本页底部留言&#xff0c;我们将不定时补发&#xff01;免责声明&#xff1a;该资料系网络转载&#xff0c;版权归原作者所有…

java zar_唬人的Java泛型并不难

泛型public interfaceFoo {}public interfaceBar {}public interfaceZar> {}上面的代码有什么区别&#xff1f;泛型初探1、为何引入泛型&#xff1f;Java 泛型也是一种语法糖&#xff0c;使用泛型可以在代码编译阶段完成类型的转换&#xff0c;避免代码在运行时强制转换而出…

团队作业7——Beta版本冲刺计划及安排

需要改进的工具流程&#xff08;如版本控制、测试工具等&#xff09; 首先把之前项目的BUG进行修复 然后完成如下的功能 冲刺的时间计划安排 &#xff08;冲刺时间为期七天&#xff0c;安排在2017.12.4——2017.12.10之间&#xff09; 组员任务陈福鹏实现博客.多语言、倒计…

开发黑名单功能demo_中台实践:通用化黑名单平台

业务中台的价值主要体现在对通用化业务能力的沉淀、整合&#xff0c;通过对可复用业务流程和业务功能的设计&#xff0c;向不同业务方提供标准化且可扩展的服务能力。本文来聊一聊笔者工作过程中设计的通用化黑名单平台&#xff0c;通过将用户管控能力的下沉&#xff0c;为各业…

java注解教程 pdf_Java注解详解

在使用SpringBoot作为Web敏捷开发的框架之后&#xff0c;SpringBoot除了自动装配配置的便捷之外&#xff0c;在很多时候需要基于注解来开发。注解不仅增加了代码的可读性&#xff0c;还增加了开发的速度。这篇文章主要讲述Java 注解。元注解元注解用于注解其他注解的。Java 5.0…

●BZOJ 1855 [Scoi2010]股票交易

题链&#xff1a; http://www.lydsy.com/JudgeOnline/problem.php?id1855 题解&#xff1a; DP,单调队列优化。&#xff08;好久没做 DP题&#xff0c;居然还意外地想出来了&#xff09; 定义 dp[i][k] 表示前 i天&#xff0c;手上还有 k股的最大收益。&#xff08;注意这个定…

java无权图求最短路径_求有权图和无权图的最短路径

无权图的最短路径思路&#xff1a;无权图的最短路径也就是要求两点之间最少几跳可达&#xff0c;那么我们可以这样&#xff0c;用广度遍历&#xff0c;从起点开始一层层遍历&#xff0c;如果第一次遍历到终点&#xff0c;那么肯定是最短路径。public static void findPath(int …