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

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

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

TimerTest.java:

package com.cn;

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 in = System.in.read();  

                if(in == 's'){   

                    timer.cancel();//使用这个方法退出任务   

                    break;

                }   

            } catch (IOException e){   

                // TODO Auto-generated catch block   

                e.printStackTrace();   

            }   

        }   

    }  

    static class MyTask extends java.util.TimerTask{    

        public void run(){   

            System.out.println("________");   

        }   

    }  

}

此类运行时:

程序启动1秒后在控制台打印“————”

间隔两秒后接着执行MyTask的run()方法,打印“————”

这样一直循环

当在控制台输入s字符时,timer定时器取消工作

跳出整个循环

程序运行结束!

TimerTest2.java:

package com.cn;

import java.io.IOException;

import java.util.Date;

import java.util.Timer;

public class TimerTest2{   

    public static void main(String[] args){   

        Timer timer = new Timer();   

        MyTask myTask1 = new MyTask();   

        MyTask myTask2 = new MyTask();   

        myTask2.setInfo("myTask-info-2");   

        timer.schedule(myTask1, 1000, 2000);  //任务1 一秒钟后执行,每两秒执行一次。 

        timer.scheduleAtFixedRate(myTask2, 2000, 3000);   //任务2 2秒后开始进行重复的固定速率执行(3秒钟重复一次)

        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();//退出任务1 // 其实应该在这里判断myTask2是否也退出了,是的话就应该break.但是因为无法在包外得到 // myTask2的状态,所以,这里不能做出是否退出循环的判断. } else if (strInfo.startsWith("Cancel-2")){ myTask2.cancel(); //退出任务2 } 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 = "INFO"; @Override public void run(){ // TODO Auto-generated method stub System.out.println(new Date() + " " + info); } public String getInfo(){ return info; } public void setInfo(String info){ this.info = info; } } }

此类创建了两个定时任务mytask1和mytask2

mytask1任务和上面的TimerTest类中的例子用法一样。即安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。

mytask2任务就不同于上面的用法了,timer.scheduleAtFixedRate它是用的timer定时器的scheduleAtFixedRate()方法来执行。

scheduleAtFixedRate()方法在API1.6.0中是这样定义的:

安排指定的任务在指定的时间开始进行重复的固定速率执行。以近似固定的时间间隔(由指定的周期分隔)进行后续执行。

近似固定的时间间隔的意思是说:在固定速率执行中,相对于已安排的初始执行时间来安排每次执行。如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则将快速连续地出现两次或更多次执行,从而使后续执行能够赶上来。

Timer类的常用其他方法:

cancel()
终止此计时器,丢弃所有当前已安排的任务。

purge()
从此计时器的任务队列中移除所有已取消的任务。

schedule(TimerTask task, Date time)
安排在指定的时间执行指定的任务。

TimerTask类的常用其他方法:

cancel()
取消此计时器任务。

run()
此计时器任务要执行的操作。

scheduledExecutionTime()
返回此任务最近实际 执行的已安排 执行时间。

简单定时器的Java实现的更多相关文章

  1. java web 项目中 简单定时器实现 Timer

    java web 项目中 简单定时器实现 Timer 标签: Java定时器 2016-01-14 17:28 7070人阅读 评论(0) 收藏 举报  分类: JAVA(24)  版权声明:本文为博 ...

  2. 算法笔记_071:SPFA算法简单介绍(Java)

    目录 1 问题描述 2 解决方案 2.1 具体编码   1 问题描述 何为spfa(Shortest Path Faster Algorithm)算法? spfa算法功能:给定一个加权连通图,选取一个 ...

  3. PAT(B) 1089 狼人杀-简单版(Java)逻辑推理

    题目链接:1089 狼人杀-简单版 (20 point(s)) 题目描述 以下文字摘自<灵机一动·好玩的数学>:"狼人杀"游戏分为狼人.好人两大阵营.在一局" ...

  4. 定时器篇---java.util.TimerTask和quartz

    最近项目中出现了定时执行任务的东西,研究了一下,觉得挺不错的,以后还用得到,就总结了下. 这里只介绍两种java.util.Timer 和 quartz java.util.Timer java自带的 ...

  5. 小学生四则运算出题程序 无操作界面java版 简单的运用java中一些基本操作

    这是本学期java课中实验大纲里的第一个实验,这里简单做了一个无用户界面版本. import java.util.Random; import java.util.Scanner; public cl ...

  6. WebService 超简单入门教程(Java)

    写在前面的话: 当两个人碰面后,产生了好感,如果需要得到双方的信息,那么双方的交流是必不可少的!应用程序也如此, 各个应用程序之间的交流就需要WebService来作为相互交流的桥梁! 项目目的: 程 ...

  7. Javascript/Jquery——简单定时器

    第一种方法: <%@ page language="java" contentType="text/html; charset=UTF-8"pageEnc ...

  8. 简单的RPC java实现

    RPC的名声大噪之时是在2003年,那一个“冲击波”病毒(Blaster Worm virus)袭卷全球的一年.而“冲击波”正是用着RPC这把刀来敲开了远程电脑的大门.当然RPC 有更多正面的应用,比 ...

  9. 简单聊天室(java版)

    这是本人从其他地方学习到的关于聊天室的一个模本,我从中截取了一部分关于客户端和服务端通信的Socket的内容.希望对大家对socket有个了解,我写的这些代码可以实现两人或多人在多台电脑上实现简单的对 ...

随机推荐

  1. [LeetCode&Python] Problem 674. Longest Continuous Increasing Subsequence

    Given an unsorted array of integers, find the length of longest continuousincreasing subsequence (su ...

  2. 测试那些事儿—selenium自动化实战之登录验证码处理

    登陆时经常出现验证码自动化测试如何处理呢? 一般有如下几种处理思路: 1.通过接口请求,拿到对应验证码信息 2.让开发配合把验证码改成万能验证码 3.注入cookies 如何通过注入cookies的方 ...

  3. move UVs of a texture

    Go to the material options on the left, and use a Custom UV. Create a vector parameter, use it to sc ...

  4. Discuz! X3 全新安装图文教程

    Discuz! 是腾讯旗下 Comsenz 公司推出的以社区为基础的专业建站平台,帮助网站实现一站式服务.让论坛(BBS).个人空间(SNS).门户(Portal).群组(Group).应用开放平台( ...

  5. Web前端新手想提升自身岗位竞争力,需做好这3件事!

    Web前端开发行业的发展前景毋庸置疑,只要是互联网企业,几乎都需要Web前端开发工程师.虽然Web前端入行门槛低,但竞争逐渐激烈,想要取得高薪,就一定要具备强大的实力.那么,在重庆Web前端培训学习中 ...

  6. redis的内存优化【转】

    Redis所有的数据都在内存中,而内存又是非常宝贵的资源.对于如何优化内存使用一直是Redis用户非常关注的问题.本文让我们深入到Redis细节中,学习内存优化的技巧.分为如下几个部分: 一.redi ...

  7. Python hashlib&hmac 模块

    用于加密相关的操作,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 hashlib模块示例: import hashlib m = hashlib. ...

  8. day11 大纲

    01 昨日内容回顾 函数名的运用: 1,特殊的变量. 2,函数名可以当做变量赋值. 3,函数名可以当做容器类类型的元素. 4,函数名可以当做函数的参数. 5,函数名可以当做函数的返回值. 函数的运用: ...

  9. uniq的坑坑

    很久没有做过文本统计之类的操作了,今天有点任务弄一下,幸亏机智的我列出了全部看了一遍,发现uniq的时候还是有重复的,然后总结了一下 假如我有1.txt这个文本: 10.0.0.1 10.0.0.1 ...

  10. 十七、springcloud(三)服务的注册与调用

    1.启动服务注册中心Eureka(见上篇) 启动成功后,暂时无服务 2.项目框架 3.创建服务提供者(spring-cloud-houge-provider)jar a.application.pro ...