文档章节

Timer类的使用

writeademo
 writeademo
发布于 2017/01/09 14:11
字数 1017
阅读 16
收藏 1

quartz框架的使用

Timer类的使用

功能:设置计划任务,但是封装任务的类却是TImerTask类,执行计划任务的代码要放入TimeTask的子类中;

TimerTask是一个抽象类

 

1例子:

schedule(Timer timer,Date time)

public class Run1 {

         private static Timer timer = new Timer();



         static public class MyTask extends TimerTask {



                   @Override

                   public void run() {

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

                   }



                   public static void main(String[] args) {

                            try {

                                     MyTask task = new MyTask();

                                     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

                                     String dateString = "2014-10-12 11:55:00";

                                     Date dateRef = sdf.parse(dateString);

                                     System.out.println("字符串时间:" + dateRef.toLocaleString() + " 当前时间:" + new Date().toLocaleString());

                                     timer.schedule(task, dateRef);

                            } catch (Exception e) {

                                     e.printStackTrace();

                            }

                   }

         }

}

结果:任务执行完成,但是进程没有销毁

内部实现:

public Timer(String name){

thread.setName(name);

thread.start();

}

创建一个Timer就是启动一个新的线程,这个新启动的线程不是守护线程,它一直运行着。

 

2例子:守护线程

public class RunTimerisDaemon {

         private static Timer timer = new Timer(true);



         static public class MyTask extends TimerTask {



                   @Override

                   public void run() {

                            System.out.println("yunxingle,时间为" + new Date());

                   }



                   public static void main(String[] args) {

                            try {

                                     MyTask task = new MyTask();

                                     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

                                     String dateString = "2014-10-12 11:55:00";

                                     Date dateRef = sdf.parse(dateString);

                                     System.out.println("字符串时间" + dateRef.toLocaleString() + "当前时间:" + new Date().toLocaleString());

                                     timer.schedule(task, dateRef);

                            } catch (Exception e) {

                                     e.printStackTrace();

                            }

                   }

         }

}

结果:程序运行后迅速结束当前进程,TimerTask中的任务不再被运行,因为进程已经结束了

 

 

3例子:多个TimerTask任务及延时的测试

 


public class Run2 {

         private static Timer timer = new Timer();



         static public class MyTask1 extends TimerTask {

                   @Override

                   public void run() {

                            System.out.println("运行le,时间为:" + new Date());

                   }

         }



         static public class MyTask2 extends TimerTask {

                   @Override

                   public void run() {

                            System.out.println("运行了,shijiawei" + new Date());

                   }

         }



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

                   MyTask1 task1 = new MyTask1();

                   MyTask2 task2 = new MyTask2();

                   SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

                   SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

                   String dateString1 = "2014-10-12 10:39:00";

                   String dateString2 = "2014-10-12 10:40:00";

                   Date dateRef1 = sdf1.parse(dateString1);

                   Date dateRef2 = sdf2.parse(dateString2);

                  System.out.println("字符串1时间:" + dateRef1.toLocaleString() + "当前时间:" + new Date());

                   System.out.println("字符串2时间:" + dateRef2.toLocaleString() + "当前时间:" + new Date());

                   timer.schedule(task1, dateRef1);

                   timer.schedule(task2, dateRef2);

         }

}

结果:TimerTask是以一个队列的方式一个一个被顺序执行的。

 

 

schedule(TimeTask task,Date firstTime,long period)测试

功能:在指定的日期之后,按指定的间隔周期性地无限循环的执行某个任务

例子:

public class Run {

         static public class MyTask extends TimerTask {

                   @Override

                   public void run() {

                            System.out.println("yunxingle:shijianwei" + new Date());

                   }

         }



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

                   MyTask task = new MyTask();



                   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

                   String dateString = "2014-10-12 10:39:00";



                   Date dateRef = sdf.parse(dateString);

                   Timer timer = new Timer();

                   System.out.println("字符串1时间:" + dateRef.toLocaleString() + "当前时间:" + new Date());

                   timer.schedule(task, dateRef, 2000);

         }

}

结果:每个2秒运行一次TimerTask任务,并且是无期限地重复执行。

 

TimerTask类的cancel()方法

功能:将自身从任务队列中清除

this.cancel()只运行一次

 

Timer类的Cancel()方法

功能:和TimerTask的cancel清除自身不同,这里的cancel作用是将任务队列中全部任务清空。

Timer类的cancel()方法有时并没有争抢到queue锁,所以TimerTask类中的任务继续正常执行

 

方法schedule(TimerTask task,long delay)的测试

功能:以执行schedule(TimerTask task,long delay)方法当前的时间为参考时间,在此基础上延迟指定的毫秒数后执行一次TImerTask任务。

 

例子:

public class RunTimer {

         static public class MyTask extends TimerTask {



                   @Override

                   public void run() {

                            System.out.println("run ing time:" + new Date());

                   }



         }



         public static void main(String[] args) {

                   MyTask task = new MyTask();

                   Timer timer = new Timer();

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

                   timer.schedule(task, 3000);

         }

}

结果:当前时间:2017-1-9 13:46:02

run ing time:Mon Jan 09 13:46:06 CST 2017

 

 

方法schedule(TimeTask task,long delay,long period)

功能:以执行schedule(TimerTask task,long delay,long period)的当前时间为参考时间,在此时间基础上延迟指定的毫秒数,再以某个间隔时间无限次数的执行某个任务。

方法scheduleAtFixedRate(TimerTask task,Date firstTime,long period)

方法任务延时;方法任务不延时;开始执行的时间不同;

 

 

© 著作权归作者所有

writeademo
粉丝 25
博文 693
码字总数 264495
作品 0
东城
私信 提问
常用事件方法及技巧(五) -- Timer(时间事件)

AS3.0完全兼容了AS2.0的时间函数,所以用习惯了AS2.0的朋友不用担心会不习惯。这些时间函数包括: 1. setInterval 和 clearInterval 这两个不用我介绍的吧?呵呵 2. setTimeout 和 clearTim...

余二五
2017/11/15
0
0
python timeit 计算函数运行时间

使用timeit模块 测试一段代码的运行时间,在python里面有个很简单的方法,就是使用timeit模块,使用起来超级方便 下面简单介绍一个timeit模块中的函数 主要就是这两个函数: 1, timeit(stmt...

阿豪boy
2017/11/02
16
0
Timer和TimeTask简介

Timer和TimeTask简介 Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。TimerTask是一个抽象类,...

时尚龙皇
2015/09/17
87
0
走在网页游戏开发的路上(六)

本文转自吴秦博客园博客,原文链接:http://www.cnblogs.com/skynet/archive/2011/06/11/2078554.html,如需转载请自行联系原作者Flash动画原理 ——动画是将静止的画面变为动态的艺术.实现...

老朱教授
2017/11/26
0
0
c#执行定时计算限制操作(计时器)

在.Net Framework Class Library(FCL)中,System.Threading命名空间下定义了一个Timer类,这就是常用的一个计时器。实际上FCL总共提供了如下几种计时器: 1、System.Threading.Timer 在实际...

嗯哼9925
2017/11/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

thinkcmf 渗透测试漏洞修复解决方案

近段时间发现很多APP程序用的是thinkcmf,此程序源码存在getshell漏洞,我们Sine安全紧急对此高危漏洞进行了分析和漏洞修复,攻击者可以通过构造特定的请求包get请求即可在远程服务器上执行任意...

网站安全
29分钟前
6
0
MySQL的IP地址与数字互转原理

一、inet_aton与inet_ntoa inet_aton是把ip地址转为数字的函数,记忆小技巧,inet表示网络相关,在c语言中a习惯性代表字符串,to就是转换的,n代表数字,aton就是字符串转数字,同理inet_nt...

trayvon
40分钟前
6
0
【翻译】全新16英寸MacBook Pro评测:开发人员的梦想成真

要问现在适合开发者用的笔记本,市面上还是有很多选择的,比如Dell的XPS系列,外星人系列(游戏也是杠杠滴),联想拯救者系列,还有形形色色的高配机型,价格也从几千到几万不等。 但是,笔吧...

Dimple91
41分钟前
8
0
IT兄弟连 HTML5教程 CSS3属性特效 CSS3分栏布局

CSS3中新出现的多列布局(multi-column)是传统HTML网页中块状布局模式的有力扩充。这种新语法能够让WEB开发人员轻松的让文本呈现多列显示。我们知道,当一行文字太长时,读者读起来就比较费劲...

老码农的一亩三分地
58分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部