当前位置: 首页 > news >正文

Java中Timer和TimerTask的使用

  这两个类使用起来非常方便,可以完成我们对定时器的绝大多数需求

  Timer类是用来执行任务的类,它接受一个TimerTask做参数

  Timer有两种执行任务的模式,最常用的是schedule,它可以以两种方式执行任务:1:在某个时间(Data),2:在某个固定的时间之后(int delay).这两种方式都可以指定任务执行的频率.看个简单的例子:

 import java.io.IOException;import java.util.Timer;public class TimerTest {public static void main(String[] args){Timer timer = new Timer();timer.schedule(new MyTask(), 1000, 2000);//在1秒后执行此任务,每次间隔2秒,如果传递一个Data参数,就可以在某个固定的时间执行这个任务.while(true){//这个是用来停止此任务的,否则就一直循环执行此任务了try {int ch = System.in.read();if(ch-'c'==0){timer.cancel();//使用这个方法退出任务}} catch (IOException e) {e.printStackTrace();}}}static class MyTask extends java.util.TimerTask{@Overridepublic void run() {System.out.println("________");}}}

    如果你使用的是JDK 5+,还有一个scheduleAtFixedRate模式可以用,在这个模式下,Timer会尽量的让任务在一个固定的频率下运行,举例说明:在上面的例子中,我们想让MyTask在1秒钟后,每两秒钟执行一次,但是因为java不是实时的(其实java实时性很差.....),所以,我们在上个程序中表达的原义并不能够严格执行.如果我们调用的是scheduleAtFixedRate,那么,Timer会尽量让你的Task执行的频率保持在2秒一次.运行上面的程序,假设使用的是scheduleAtFixedRate,那么下面的场景就是可能的:1秒钟后,MyTask 执行一次,因为系统繁忙,之后的2.5秒后MyTask 才得以执行第二次,然后,Timer记下了这个延迟,并尝试在下一个任务的时候弥补这个延迟,那么,1.5秒后,MyTask 将执行的三次."以固定的频率而不是固定的延迟时间去执行一个任务",果然很方便吧^_^

下面给出一个复杂点的例子,其中告诉大家怎么退出单个TimerTask,怎么退出所有Task

 package MyTimerTest;import java.io.IOException;import java.util.Timer;/** 本类给出了使用Timer和TimerTaske的主要方法,其中包括定制任务,添加任务* 退出任务,退出定时器.* 因为TimerTask的status域是包级可访问的,所以没有办法在java.util.包外* 得到其状态,这对编程造成一些不便 .我们不能判断某个Task的状态了.* */public class TimerTest {public static void main(String[] args) {Timer timer = new Timer();MyTask myTask1 = new MyTask();MyTask myTask2 = new MyTask();myTask2.setInfo("myTask-2");timer.schedule(myTask1, 1000, 2000);timer.scheduleAtFixedRate(myTask2, 2000, 3000);while (true) {try {byte[] info = new byte[1024];int len = System.in.read(info);String strInfo = new String(info, 0, len, "GBK");//从控制台读出信息if (strInfo.charAt(strInfo.length() - 1) == ' ') {strInfo = strInfo.substring(0, strInfo.length() - 2);}if (strInfo.startsWith("Cancel-1")) {myTask1.cancel();//退出单个任务// 其实应该在这里判断myTask2是否也退出了,是的话就应该break.但是因为无法在包外得到// myTask2的状态,所以,这里不能做出是否退出循环的判断.} else if (strInfo.startsWith("Cancel-2")) {myTask2.cancel();} else if (strInfo.startsWith("Cancel-All")) {timer.cancel();//退出Timerbreak;} else {// 只对myTask1作出判断,偷个懒^_^myTask1.setInfo(strInfo);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}static class MyTask extends java.util.TimerTask {String info = "^_^";@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println(info);}public String getInfo() {return info;}public void setInfo(String info) {this.info = info;}}}

相关文章:

Java中Timer和TimerTask的使用

这两个类使用起来非常方便,可以完成我们对定时器的绝大多数需求 Timer类是用来执行任务的类,它接受一个TimerTask做参数 Timer有两种执行任务的模式,最常用的是schedule,它可以以两种方式执行任务:1:在某个时间(Data),2:在某个固定的时间之后…...

计算机竞赛 机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.2 打哈欠检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 🔥 优质竞赛项目系列&#x…...

DFS寻找从s到t的所有路径

问题描述&#xff1a; 输入一个有向图&#xff0c;输出从s到t的所有路径的结点 输入&#xff1a; 3 3 0 1 1 2 0 2输出&#xff1a; 0 1 2 0 2 代码&#xff1a; #include<bits/stdc.h> using namespace std;const int N 103; vector<int>e[N];//用行为N的…...

分享!JetBrains IDE中的GitLab支持

GitLab是流行的基于git的软件开发和部署平台之一&#xff0c;虽然很长一段时间以来&#xff0c;所有基本git操作都已经可以通过GitLab实现&#xff0c;但GitLab集成仍是JetBrains社区的一大最热门请求。为此&#xff0c;JetBrains团队今年与GitLab联手提供了这种类型的集成。 …...

jq弹窗拖动改变宽高

预览效果 <div classtishiMask><div class"tishiEm"><div id"coor"></div><div class"topNew ismove"><span class"ismove">提示</span><p onclick"closeTishi()"></p&…...

时间不确定度在分布式系统中的说明

On the one hand 时间不确定度问题和影响在分布式系统中 说明 时钟不确定度&#xff08;Clock Uncertainty&#xff09;是指在分布式系统中&#xff0c;由于网络延迟、时钟漂移等因素导致系统中各个节点时钟的不同步现象。这种不同步可能会影响到分布式系统的一致性和正确性…...

VMware vCenter 从6.7跨版本升级至7.0U3N

本文尝试使用 vCenter Server Appliance 管理界面 (VAMI) 进行对vCenter Server Appliance7应用进行小版本升级&#xff0c;从6.7.0.47000升级到7.0.3.01600&#xff08;7.0U3N&#xff09;。 一、升级前的准备工作 1、检查当前运行环境&#xff08;当前为6.7.0.47000&#x…...

大麦订单生成器最新版 大麦订单一键生成截图

1.可以一键添加&#xff0c;生成的假订单没有水印&#xff0c;界面也很真实。 2.在软件中输入生成的信息&#xff0c;这是产品信息&#xff0c;选择生成的产品图像&#xff0c;最后生成它。 后台一键生成&#xff0c;独立后台管理 教程&#xff1a;解压源码&#xff0c;修改数…...

如何对Map集合的key进行大小写转换?

工具类&#xff1a; ToUpperCaseKeyMapUtil.java public class ToUpperCaseKeyMapUtil {//对单一的mappublic static <T> Map<String, T> toUpperCaseKeyMap(Map<String, T> map) {if (map ! null) {List<String> mapKeyList new ArrayList<>…...

将函数实现放到CPP报“无法解析的外部符号...”,系VS Bug

发现一个现象&#xff0c;就是项目中有一个类&#xff0c;如果将函数实现全部放到头文件中&#xff0c;编译不报错&#xff0c;如果将函数实现放到CPP中则始终提示“无法解析的外部符号...”&#xff0c;考虑到放到头文件中能正常编译运行&#xff0c;显然这里不符合“无法解析…...

异步FIFO设计的仿真与综合技术(3)

概述 本文主体翻译自C. E. Cummings and S. Design, “Simulation and Synthesis Techniques for Asynchronous FIFO Design 一文&#xff0c;添加了笔者的个人理解与注释&#xff0c;文中蓝色部分为笔者注或意译。前文链接&#xff1a; 异步FIFO设计的仿真与综合技术&#xf…...

什么是区块链,解释区块链的原理和应用场景

1、什么是区块链&#xff0c;解释区块链的原理和应用场景。 区块链是一种分布式数据库&#xff0c;它由一系列按照时间顺序排列的数据块组成&#xff0c;并采用密码学方式保证不可篡改和不可伪造。区块链技术最初起源于比特币&#xff0c;作为比特币的底层技术&#xff0c;用于…...

使用bert进行文本二分类

构建BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;的训练网络可以使用PyTorch来实现。下面是一个简单的示例代码&#xff1a; import torch import torch.nn as nn from transformers import BertModel, BertTokenizer# Load BERT to…...

用Windows Installer CleanUp Utility 在windows server上面将软件卸载干净,比如SQLSERVER

这里写自定义目录标题 下载文件&#xff1a;Windows Installer CleanUp Utility。 通过以上工具可以将一个应用程序卸载干净。...

Java手写LinkedList和拓展

Java手写LinkedList和拓展 思维导图 #mermaid-svg-K0RTlFFvnikDRvqp {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-K0RTlFFvnikDRvqp .error-icon{fill:#552222;}#mermaid-svg-K0RTlFFvnikDRvqp .error-text{fill…...

机器学习(14)---逻辑回归(含手写公式、推导过程和手写例题)

逻辑回归 一、逻辑回归概述二、模型、策略和优化&#xff08;手写&#xff09;三、w和b的梯度下降公式推导四、例题分析4.1 题目4.2 解答 一、逻辑回归概述 1. 逻辑回归也称作logistic回归分析&#xff0c;是一种广义的线性回归分析模型&#xff0c;属于机器学习中的监督学习。…...

LLFormer 论文阅读笔记

Ultra-High-Definition Low-Light Image Enhancement: A Benchmark and Transformer-Based Method 这是南京大学在AAAI 2023发表的一篇AAAI2023 超高清图像暗图增强的工作。提出了一个超高清暗图增强数据集&#xff0c;提供了4K和8K的图片&#xff0c;同时提出了一个可用于暗图…...

JSP语法基础习题

目录 简答题&#xff1a;jsp中静态include和动态include的区别是什么&#xff1f; 简答题&#xff1a;jsp有哪些内置对象&#xff0c;作用分别是什么&#xff1f; 简答题&#xff1a;Request对象的主要方法有哪些&#xff1f; 代码题&#xff1a; 简答题&#xff1a;jsp中静态…...

vue类与样式的绑定列表渲染

目录 1.类与样式的绑定 1.1绑定 HTML class 1.2绑定数组 1.3绑定内联样式 绑定数组 2.列表渲染 2.1v-for​ 2.2v-for 与对象 2.3在 v-for 里使用范围值​ 1.类与样式的绑定 1.1绑定 HTML class 我们可以给 :class (v-bind:class 的缩写) 传递一个对象来动态切换 class…...

vue3+element-plus权限控制实现(el-tree父子级不关联情况处理)

文章目录 前言一、遇到的交互场景el-tree 中 check-strictly 属性 二、处理父级的半选中以及选中交互el-treecheck&#xff0c;check-change 事件编辑进来&#xff0c;父级的半选状态处理 总结 前言 在开发后台管理系统的时候&#xff0c;用户的权限控制是一个常见的需求。这里…...

NASA、ESA官方数据源直连失败?Python遥感API调用失效诊断手册(含12个HTTPS/Token/CRS认证报错速查表)

第一章&#xff1a;NASA、ESA官方遥感数据直连失效的典型现象与影响评估近年来&#xff0c;全球多个科研机构与商业遥感平台频繁报告无法稳定访问NASA Earthdata Login和ESA Copernicus Open Access Hub的API端点&#xff0c;表现为HTTP 503、401或连接超时等异常响应。此类直连…...

遥感数字图像处理:从入门到精通——作物旱情遥感监测(完整版:基于TVDI插件和无插件)

一、实验要求根据实验数据提取实验区作物干旱指数&#xff08;TVDI&#xff09;&#xff0c;生成实验区旱情等级分布图&#xff0c;并分析土壤旱情和降水量的关系。二、数据说明TVDI_main.sav:ENVI插件&#xff0c;主要功能为VI-LST的散点图生成、干湿边方程的拟合、TVDI影像的…...

Pixel Mind Decoder 前端交互设计:基于 JavaScript 的情绪看板开发

Pixel Mind Decoder 前端交互设计&#xff1a;基于 JavaScript 的情绪看板开发 1. 情绪看板的应用场景与价值 在现代数字化产品中&#xff0c;理解用户情绪变得越来越重要。无论是社交媒体监测、客服系统优化&#xff0c;还是心理健康应用开发&#xff0c;能够实时分析并可视…...

使用FFmpeg高效实现MKV多语言字幕动态切换方案

1. MKV字幕基础与FFmpeg核心能力解析 第一次接触MKV视频封装格式时&#xff0c;我被它的灵活性惊艳到了。这种被称为Matroska的容器格式&#xff0c;就像瑞士军刀一样能同时容纳视频、音频、字幕等多种轨道。特别是对多语言字幕的支持&#xff0c;让它成为国际版视频分发的首选…...

Wan2.2-I2V-A14B企业级部署:Nginx反向代理+HTTPS+负载均衡扩展方案

Wan2.2-I2V-A14B企业级部署&#xff1a;Nginx反向代理HTTPS负载均衡扩展方案 1. 企业级部署概述 Wan2.2-I2V-A14B作为高性能文生视频模型&#xff0c;在企业级应用中需要满足高并发、高可用和安全访问等需求。本文将详细介绍基于Nginx反向代理、HTTPS加密和负载均衡的完整部署…...

新手福音:利用快马一键生成mobaxterm中文界面配置脚本

作为一个经常需要远程连接服务器的用户&#xff0c;MobaXterm一直是我的主力工具之一。但刚开始使用时&#xff0c;全英文的界面确实让我这个新手有点手足无措。最近发现用InsCode(快马)平台可以快速生成配置脚本&#xff0c;简直不要太方便&#xff01; 为什么需要中文界面 对…...

实战指南:用快马平台生成团队统一的homebrew环境配置脚本,保障协作无忧

最近在团队协作中遇到了一个头疼的问题&#xff1a;新成员加入时&#xff0c;光是搭建开发环境就要折腾一整天。不同成员的电脑上软件版本参差不齐&#xff0c;导致"在我机器上能跑"的经典问题频繁出现。经过一番摸索&#xff0c;我发现用homebrew配合bash脚本可以完…...

AI 模型量化精度与推理速度平衡

AI模型量化精度与推理速度平衡&#xff1a;智能时代的效率与质量博弈 在人工智能技术快速发展的今天&#xff0c;AI模型的部署效率成为关键挑战。模型量化技术通过降低计算精度来提升推理速度&#xff0c;但如何在精度损失与速度提升之间找到平衡&#xff0c;成为开发者关注的…...

嵌入式开发:裸机到OS的技术挑战与优化

嵌入式开发从裸机到操作系统的技术挑战分析1. 系统性能需求变化1.1 CPU运行速度要求嵌入式系统引入操作系统后&#xff0c;CPU需要承担额外的调度开销。实时控制系统通常需要1ms甚至更短的tick间隔来保证控制精度&#xff0c;这进一步增加了CPU的负担。现代32位微控制器的性能提…...

南北阁Nanbeige 4.1-3B实现数据库课程设计自动化

南北阁Nanbeige 4.1-3B实现数据库课程设计自动化 还在为数据库课程设计熬夜画ER图、写SQL而头疼吗&#xff1f;试试让AI来帮你搞定这一切 记得我上大学那会儿&#xff0c;最头疼的就是数据库课程设计。光是画ER图就能折腾好几个晚上&#xff0c;写SQL查询更是让人头大。要是那时…...