Timer和TimerTask的使用

Java定时任务(一) Timer及TimerTask的案例解析及源码分析 Java定时任务(一) Timer及TimerTask的案例解析及源码分析 一、概述: 定时任务这个概念在Java的学习以及项目的开发中并不陌生,应用场景也是多种多样。比如我们会注意到12306网站在锁定车票的30分钟以内要进行车票费用的支付,否则订单会被取消;再比如我... 阅读详情

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

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) {
                
// TODO Auto-generated catch block

                e.printStackTrace();
            }

        }

    }

    
    
    
static class MyTask extends java.util.TimerTask{

        @Override
        
public void run() 
{
            
// TODO Auto-generated method stub

            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();
//退出Timer
                    break;
                }
 else {
                    
// 只对myTask1作出判断,偷个懒^_^
                    myTask1.setInfo(strInfo);
                }

            }
 catch (IOException e) {
                
// TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

    }


    
static class MyTask extends java.util.TimerTask {
        String info 
= "^_^";

        @Override
        
public void run() {
            
// TODO Auto-generated method stub
            System.out.println(info);
        }


        
public String getInfo() {
            
return info;
        }


        
public void setInfo(String info) {
            
this.info = info;
        }


    }


}

Java的定时器Timer和TimerTask使用全解析 在Java编程中,定时任务是一个常见的需求。无论是定期执行某些操作,还是在特定时间点执行任务,Java提供的Timer和TimerTask类就可以帮助我们轻松实现这些功能。今天将详细介绍如何使用这两个类,包括任务的执行和暂停。 阅读详情

相关推荐

Android中使用Timer和TimerTask进行任务调度

在上面的代码中,我们在Activity的onCreate方法中创建了一个Timer对象和一个TimerTask对象。然后,我们使用Timer的schedule方法来安排任务的执行,第一个参数是TimerTask对象,表示要执行的任务;另外,在Activity的onDestroy方法中,我们需要取消任务的执行,以避免内存泄漏。在这里,我们使用Timer的cancel方法来取消任务的执行。在任务的run方法中,我们可以编写具体的任务逻辑,例如更新UI、发送网络请求等操作。

WwxActionscript的博客 809

java定时器-Timer和TimerTask详解

1、例子入手 package pers.growing.test; import java.util.Timer; import java.util.TimerTask; public class Main { /** * 延迟100ms后,间隔1s打印出:hello world * * @param args * @throws Inte...

嘻哈的博客 5万+

Golang实战:用Quic-Go v0.46.0搭建高性能文件传输服务(附完整代码)

本文详细介绍了如何使用Golang和Quic-Go v0.46.0构建高性能文件传输服务,涵盖服务端和客户端的完整实现。通过QUIC协议的多路复用、零RTT连接等特性,显著提升文件传输效率,特别适合高延迟或不稳定网络环境。文章提供完整代码示例和性能调优技巧,帮助开发者快速部署高效的文件传输解决方案。

weixin_33737134的博客 451

详解java定时任务

在我们编程过程中如果需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer定时任务来实现。下面LZ就其原理、实例以及Timer缺陷三个方面来解析java Timer定时器。一、简介      在java中一个完整定时任务需要由Timer、TimerTask两个类来配合完成。 API中是这样定义他们的,Timer:一种工具,线程用其安排以后在后台线程中执行的任务。可安排任

chenssy 的技术博客 8万+

无人车路径规划方法汇总

无人车路径规划方法汇总

weixin_44380244的博客 2559

语义通信实战:跳过“比特”保“语义”,手把手构建轻量级图像压缩重建网络(基于PyTorch)

本文详细介绍了基于PyTorch的轻量级语义通信系统LICRnet的实现,专注于图像压缩重建中的语义信息保留。通过深度可分离卷积、可变窗口多尺度注意力等创新技术,显著降低计算量并提升性能,特别适用于无人机巡检、远程医疗等物联网场景。文章包含完整的代码实现、训练策略及部署优化方案。

weixin_27697385的博客 221

Java定时任务Timer、TimerTask与ScheduledThreadPoolExecutor详解

当程序在18:00:00之前执行时,schedule分别会在18:00:00、18:00:06、18:00:12...等时间点执行计划任务,每隔时间点间隔6秒。而当程序运行时刻比计划任务计划首次执行时间晚时,如同样在18:07:00时刻开始执行程序,则计划任务程序会立马计算程序执行时刻晚于指定时刻,会立即执行(18:07:00-18:00:00)/3+1=3次任务(代表18:00:00、18:03:00和18:06:00三个时刻执行的任务),接下来任务执行时刻是18:09:00、18:12:00等。

码灵的博客 3190

SillyTavern与Claude Code API集成:从零搭建AI聊天酒馆的完整指南

本文提供了一份从零搭建SillyTavern AI聊天前端的完整指南,重点讲解如何将其与Claude Code API集成。内容涵盖Node.js环境准备、SillyTavern部署、OpenAI兼容格式的API配置、模型选择与参数调校,以及角色扮演、扩展功能等高级玩法,帮助用户打造本地化、可定制的专属AI聊天体验。

assembly8low的博客 2615

android的timertask,Android 中 Timer 和 TimerTask的使用

Android中Timer是一个普通的类,其中有几个重要的方法;而TimerTask则是一个抽象类,其中含有一个抽象方法run()。使用Timer类中的schedule()方法可以完成对TimerTask的调度,该方法具有三个参数,其函数声明如下:public void schedule(TimerTask task, long delay, long period)其中第一个参数为TimerTa...

weixin_35448535的博客 2623

从零开始搭建一个高性能电流镜:手把手教你设计Wide-Swing Cascode结构

本文详细解析了Wide-Swing Cascode电流镜的设计原理与实战流程。针对低压高性能模拟电路设计的核心挑战,文章手把手指导如何从理论分析、参数计算到仿真验证,搭建一个兼具高输出阻抗和低输出电压裕度的电流镜结构,并深入探讨了偏置电路生成、性能优化及版图匹配等关键要点。

weixin_29294975的博客 626

【实战项目开发技术分享】ROS1.0、ROS 2.0和CyberRT开源通信框架对比

随着机器人和自动驾驶技术的飞速发展,开源通信框架在机器人、自动驾驶行业扮演着重要的角色。ROS1.0是一个广泛应用于机器人领域的开源框架,ROS 2.0是其改进版本,而CyberRT是Baidu Apollo自动驾驶平台的通信框架。ROS和ROS 2.0都注重灵活性和共享性,适用于各种机器人应用。CyberRT则专注于实时性和高性能,适用于自动驾驶等对实时性要求较高的场景。选择适合的框架取决于具体应用需求和开发者的偏好。

xiewf的博客 2万+

Android中使用Timer和TimerTask

前言近期有个需求,要每隔一段时间,应用向后台发送一些数据,用作统计,这时可以使用Java提供的计时器的工具类,即Timer和TimerTask来实现这一功能。 简介Timer是一个普通的类,其中有几个重要的方法;而TimerTask则是一个抽象类,其中有一个抽象方法run(),类似线程中的run()方法,我们使用Timer创建一个他的对象,然后调用schedule方法来完成这种间隔的操作。 这里用

苦逼的程序猿☺ 2万+

一分钟详解PCL中点云配准技术

原文首发于微信公众号「3D视觉工坊」: 一分钟详解PCL中点云配准技术 本文是对前两篇文章:点云配准(一 两两配准)以及3D点云(二 多福点云配准)的补充,希望可以在一定程度上帮助大家对点云配准理解地更为深刻。 一 PCL中点云配准技术的简单实现 在同一文件夹下,有测试数据文件monkey.ply,该文件是利用Blender创建的默认Monkey模型。 利用如下代码,将初始点云(图中绿色点云)...

3D视觉工坊 3705

使用Java中的Timer和TimerTask

      有的时候我们需要每隔一段时间去执行某个任务,在Java中提供了Timer and TimerTask来完成这个任务,本文提供一个应用程序的源代码告诉你如何使用这两个类。       Timer和TimerTask的方法很少,使用起来也非常方便。希望如果遇到问题参考一下API doc,里面写的很清楚。TimerTask是个抽象类,他扩展了Object并实现了Runnable接口,因此你必

mingjava的专栏 2万+

1.4 点云数据获取方式——结构光相机

与此同时,利用相机从特定角度捕捉变形后的图案,基于三角测量原理,通过精确计算相机与投影仪之间的几何关系以及图案的变形程度,就能准确计算出物体表面各点的三维坐标,从而获取高精度的三维点云数据。在高端制造业中,对于微小零部件的尺寸测量和缺陷检测,结构光相机能够提供极其精确的数据,确保产品质量符合严格的标准。时序编码:这类相机通过序列投射多幅不同图案,如格雷码、相移条纹等,通过对这一系列图案的时间序列进行解码分析,就能够获取亚像素级精度的三维信息,其单点误差能够控制在≤0.1mm,展现出极高的测量精度。

qq625924821的博客 925

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

java中timer和timertask_使用Java中的Timer和TimerTask

有的时候我们需要每隔一段时间去执行某个任务,在Java中提供了Timer and TimerTask来完成这个任务,本文提供一个应用程序的源代码告诉你如何使用这两个类。Timer和TimerTask的方法很少,使用起来也非常方便。希望如果遇到问题参考一下API doc,里面写的很清楚。TimerTask是个抽象类,他扩展了Object并实现了Runnable接口,因此你必须在自己的Task中实现p...

weixin_34312809的博客 225

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Timer和TimerTask类的使用

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

hongzhao129的专栏 678

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Timer和TimerTask的简单使用

    经常会使用到计时的这个功能,在MFC中可以使用SetTimer这个函数,在OnTimer中去作相应的处理。Java中要实现类似的功能,可以使用java.uitl.Timer和java.uitl.TimerTask这两个类。Timer是用来安排任务执行的一个类。它会专门启动一个线程用来安排任务,这个线程你可以设定为守护线程(通过构造函数Timer(boolean isDaemon)来设定 )

zpk1234的专栏 964

使用Timer和TimerTask实现欢迎界面

作者:magic003  文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=938欢迎界面是在程序启动时用来显示产品(如logo,名称),作者,版本等信息的界面。当用户按下任意键,或经过一定时间后,欢迎界面会自动消失,进入程序的主界面。很多程序都设有欢迎界面,尤其是游戏软件。本文将介绍如何使用Timer和TimerTask来

mobilechannel的专栏 910

Android 中 Timer 和 TimerTask的使用

Android 中 Timer 和 TimerTask的使用 https://www.jianshu.com/p/89ca760af5f1

ly969434341的专栏 1678

JSP中使用Timer和TimerTask

<%@page import="java.util.Iterator"%> <%@page import="java.util.Set"%> <%@page import="java.util.Enumeration"%> <%@page import="java.util.TimerTask"%> <%@page import="java.util.Date"%> <%@page import="java.util.Timer"%>.

allway2的博客 593

Java中的Timer和TimerTask的使用

Timer是一个定时器类,通过该类可以为指定的定时任务进行配置。TimerTask类是一个定时任务类,该类实现了Runnable接口,而且是一个抽象类,如下所示:   public abstract class TimerTask implements Runnable   可以通过继承该类,来实现自己的定时任务。   Timer定时器实例有多种构造方法:   Timer()   创建一

曼诗雅先生 427

Java中Timer和TimerTask的使用

Java中Timer和TimerTask的使用

欢迎朋友,我是一名十多年开发经验的新手,希望多多指教。 314

Java中Timer和TimerTask使用

Java提供了轻量级的定时任务实现Timer,通过Timer我们可以实现定时执行任务,定时循环执行任务的功能,我们先看JavaDoc中关于Timer的说明 一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。   与每个 Timer 对象相对应的是单个后台线程,用于顺序地执行所有计时器任务。计时器任务应该迅速完成。如果完成某个计时器任务的时间太长...

换了马甲的小强的博客 4442

Timer和TimerTask使用完整示例

MainActivity如下: package cc.test; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.os.Bundle; /** * Demo描述: * Timer和TimerTask使用完整示例 */ public class

谷哥的小弟 2218
上一篇: ${}的使用
下一篇: Javasssist初探(需要对Java的ClassLoader机制有一些了解)
DeepNightTwo
博客等级 码龄21年 3粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值