定时器Timer的使用

控制/MCU

1879人已加入

描述

定时器Timer的使用

定时计划任务功能在Java中主要使用的就是Timer对象,它在内部使用多线程的方式进行处理,所以它和多线程技术还是有非常大的关联的。在JDK中Timer类主要负责计划任务的功能,也就是在指定的时间开始执行某一个任务,但封装任务的类却是TimerTask类。

定时的功能我们在手机上见得比较多,比如定时清理垃圾,闹钟,等等。定时功能在java中主要使用的就是Timer对象,他在内部使用的就是多线程的技术。

Time类主要负责完成定时计划任务的功能,就是在指定的时间的开始执行某个任务。

Timer类的作用是设置计划任务,而封装任务内容的类是TimerTask类。此类是一个抽象类,继承需要实现一个run方法。

通过查文档我们看到Timer有以下几个构造函数:

Timer的方法以下这么多:

下面我们通过定时器来完成一个简单功能,就是在运行项目三秒后,在控制台打印出“您该起床了”,来模拟一下闹钟的功能:

package com.wang.reflect;

import java.util.Timer;

import java.util.TimerTask;

class MyTask extends TimerTask{

@Override

public void run() {

System.out.println(“您该起床了!!!!”);

}

}

public class TimerDemo {

public static void main(String[] args) {

//创建定时器对象

Timer t=new Timer();

//在3秒后执行MyTask类中的run方法

t.schedule(new MyTask(), 3000);

}

}

运行后,我们发现三秒后控制台打印出了相当的文字,但是任务虽然执行完了,进程却没有销毁,还是呈红色状态,这是什么原因呢?

创建了一个Timer就相当于启动了一个新线程,这个新线程并不是守护线程,所以会一直运行。

在Time类和TimerTask类中都有一个cancel()方法。

TimerTask类中的作用是:将自身从任务队列中清除,(一个Timer对象可以执行多个Timertask任务)

Timer类中的作用是:将任务队列中的全部任务清空。

下面写一个实例,定时删除指定磁盘某个目录下的所有文件:

package com.wang.reflect;

import java.io.File;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Timer;

import java.util.TimerTask;

class MyTask extends TimerTask{

/**

* 定时删除指定位置的文件,(这里以删除f盘下aa文件夹的所有文件为例)

*/

@Override

public void run() {

File file=new File(“f://aa”);

deleteFolder(file);

}

public void deleteFolder(File file){

File[] files=file.listFiles();

for(File f:files){

if(f.isDirectory()){

//使用递归

deleteFolder(f);

}else{

f.delete();

}

}

file.delete();

}

}

public class TimerDemo {

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

//创建定时器对象

Timer t=new Timer();

String time=“2016-04-04 11:26:40”;

Date d=new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”).parse(time);

t.schedule(new MyTask(), d);

}

}

注意,如果在上面测试代码中,我给出的Date类型的时间,早于当前的时间。则会立即执行task任务。

C#中Timer定时器的使用示例

关于C#中timer类 在C#里关于定时器类就有3个:

1.定义在System.Windows.Forms里

2.定义在System.Threading.Timer类里

3.定义在System.Timers.Timer类里

System.Windows.Forms.Timer是应用于WinForm中的,它是通过Windows消息机制实现的,类似于VB或Delphi中的Timer控件,内部使用API SetTimer实现的。它的主要缺点是计时不精确,而且必须有消息循环,Console Application(控制台应用程序)无法使用。

System.Timers.Timer和System.Threading.Timer非常类似,它们是通过.NET Thread Pool实现的,轻量,计时精确,对应用程序、消息没有特别的要求。

System.Timers.Timer还可以应用于WinForm,完全取代上面的Timer控件。它们的缺点是不支持直接的拖放,需要手工编码。

本文URL:http://www.bianceng.cn/Programming/csharp/201410/45596.htm

下面举例说明,System.Timers.Timer定时器的用法。

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Timers;

namespace Timer001

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

//实例化Timer类

System.Timers.Timer aTimer = new System.Timers.Timer();

private void button1_Click(object sender, EventArgs e)

{

this.SetTimerParam();

}

private void test(object source, System.Timers.ElapsedEventArgs e)

{

MessageBox.Show(DateTime.Now.ToString());

}

public void SetTimerParam()

{

//到时间的时候执行事件

aTimer.Elapsed += new ElapsedEventHandler(test);

aTimer.Interval = 1000;

aTimer.AutoReset = true;//执行一次 false,一直执行true

//是否执行System.Timers.Timer.Elapsed事件

aTimer.Enabled = true;

}

}

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分