`

计时器2

 
阅读更多

 

  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){

54com.cn


        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;




/* JavaScript之家http://www.jorse.cn
 * 本类给出了使用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{

feedom.net


            
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")) {

feedom.net


                    myTask2.cancel();
                } 
else if (strInfo.startsWith("Cancel-All")) {

JavaScript之家http://www.jorse.cn


                    timer.cancel();
//退出Timer
                    break;
                } 
else {
                    
// 只对myTask1作出判断,偷个懒^_^
                    myTask1.setInfo(strInfo);
                }
            } 
catch (IOException e) {                 // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

JavaScript之家http://www.jorse.cn
    }

    
static class MyTask extends java.util.TimerTask {

54com.cn


        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;
        }

    }

}

分享到:
评论

相关推荐

    本人原创VB套装(计时器2个、时钟2个)

    本人原创VB套装(计时器2个、时钟2个) 欢迎下载!

    计时器.exe 计时器.exe

    计时器.exe计时器.exe计时器.exe计时器.exe计时器.exe计时器.exe计时器.exe计时器.exe计时器.exe计时器.exe计时器.exe计时器.exe计时器.exe计时器.exe计时器.exe计时器.exe计时器.exe计时器.exe计时器.exe计时器.exe...

    windows桌面计时器

    2. 任务计划程序:虽然这不是一个标准的计时器,但Windows的任务计划程序可以用来创建自动化任务,例如运行一个提醒程序。通过设置触发器在特定时间执行任务,可以模拟计时器的功能。 二、第三方计时器软件 1. ...

    辩论赛计时器

    "辩论赛计时器"是一款专为辩论比赛设计的计时工具,其主要功能是帮助组织者精确控制比赛时间,确保各个环节按时进行。这款计时器是基于Delphi编程语言开发的,Delphi是一种强大的面向对象的编程环境,以其高效、易用...

    多功能计时器-倒计时器

    在IT行业中,计时器和倒计时器是常见的实用工具,尤其在组织各类活动或比赛中,它们扮演着至关重要的角色。"多功能计时器-倒计时器"这款应用程序,正如其标题所示,旨在提供一种高效且灵活的计时解决方案,适应多种...

    希沃白板计时器提取版 ,集成倒计时和计时器两大功能,支持全屏

    在日常工作或学习中,我们经常需要掌握和计算时间,这时计时器工具就显得尤为重要。许多朋友发现希沃软件中的计时功能非常方便实用。今天,我为大家介绍希沃计时器工具,这是从希沃软件中单独提取出来的功能,提供了...

    labview实现计时器

    本篇文章将深入探讨如何在LabVIEW中实现计时器,并涉及计时器的复位功能。 首先,我们来看LabVIEW中的基本计时器类型。有两种主要的计时器:定时器(Timer)和延时器(Delay)。定时器在达到预设时间后触发一个事件...

    swf计时器(很好用的swf计时器)

    swf计时器(很好用的swf计时器)swf计时器(很好用的swf计时器)

    组态王计时器控件及使用文档

    2. 配置参数:设置计时器的初始值、计时期限、计时单位等属性。 3. 编写脚本:在事件处理函数中编写计时器触发后执行的代码,例如在“计时器超时”事件中添加设备操作指令。 4. 连接变量:将计时器的当前值连接到...

    计时器(演讲赛计时专用)

    2. **实时显示**:计时器在运行过程中会实时更新剩余时间,让参赛者和观众都能清楚地看到当前的时间状态,增加比赛的透明度。 3. **控制按钮**:通常包含“开始”、“暂停”和“重置”等按钮,允许比赛组织者根据...

    安卓 简单计时器 计时器

    2. **清空**:清除当前计时,将计时器重置为零。这可能涉及到设置计时器的初始值为0,并更新UI显示。 3. **暂停**:中断计时器的运行,但保留当前时间,以便稍后恢复。在Android中,可以使用`Handler....

    PPT演讲倒计时器

    3. 在计时器软件中设定三段提醒时间,如开场2分钟,主体15分钟,结尾3分钟。 4. 调整计时器窗口的位置和大小,使其既能被演讲者看到,又不影响观众对PPT内容的视线。 5. 开始演讲,计时器会实时显示剩余时间,当达到...

    java 秒表计时器

    秒表类(MyStopWatch) 功能: 1.启动计时器 2.停止计时器 3.暂停计时 4.恢复被暂停的秒表 5.分段计时

    数字计时器(eda)

    2. **设计结构**:利用进程(process)来描述计时器的行为。进程会在时钟脉冲的上升沿触发,检查清零或启动信号,并更新计数器的值。 3. **计数器设计**:设计多个计数器,分别用于小时、分钟和秒钟的计数。这些...

    Android简单的计时器源码

    2. **CountDownTimer**:Android 提供了`CountDownTimer`类,它是一个预先定义好的计时器,适合进行倒计时操作。你可以自定义`onTick(long millisUntilFinished)`方法,在倒计时每过一段时间后执行,以及`onFinish()...

    组态王秒计时器编程方法

    2. 计时器事件处理:在脚本编辑器中,编写计时器的启动和停止事件。启动事件中,设置计时器变量的初始值;停止事件中,停止计时器的计数。 3. 更新显示组件:在计时器的周期性事件中,更新数字显示组件的值,使其与...

    电话通话计时器PCB

    电话通话计时器PCB是一种专门用于记录电话通话时间的硬件设计,主要应用于需要精确计费或管理通话时间的场景。在过去的通信技术中,这种设备尤为重要,因为当时的电话服务通常按照通话时间来收费。PCB(Printed ...

    1-99分钟倒计时计数计时器60进制计数器倒计时定时器等6个计时器Multisim仿真实例

    在这个“1-99分钟倒计时计数计时器60进制计数器倒计时定时器等6个计时器Multisim仿真实例”中,我们将探讨几个关键的计时器设计概念和技术。 首先,让我们理解什么是倒计时计时器。倒计时计时器是一种设备或电路,...

    计时器-子叶计时器-倒计时会议提醒功能

    为了满足这一需求,市面上出现了各种计时器应用,而其中,“子叶计时器-倒计时会议提醒功能”以其简洁易用的特点脱颖而出。 子叶计时器的设计目标十分明确,它是一款专为会议提醒和倒计时需求设计的应用程序,旨在...

    建立可随着音乐结束的倒数计时器2

    在Unity3D游戏开发中,有时我们需要在游戏结束时添加倒数计时器,以便给玩家提供重玩或退出的选项。本教程将详细介绍如何创建一个与音乐结束同步的倒计时器,主要使用JavaScript语言实现。以下是实现这一功能的关键...

Global site tag (gtag.js) - Google Analytics