定时器是一个应用十分广泛的线程工具,可用于调度多个定时任务以后台线程的方式执行。

在Java中,可以通过Timer和TimerTask类来实现定义调度的功能

开发中 Quartz是一个完全由java编写的开源调度框架。

定时器:可以让我们在指定的时间做某件事情,还可以重复的做某件事情。
依赖Timer和TimerTask这两个类:
  TimerTask:任务类
  Timer:定时类
   A、public Timer() 创建一个新计时器。
   B、public void schedule(TimerTask task,long delay) 安排在指定延迟后执行指定的任务。
   C、public void schedule(TimerTask task,long delay,long period)
      安排指定的任务在指定的时间开始进行重复的固定延迟执行。以近似固定的时间间隔(由指定的周期分隔)进行后续执行。
   D、public void schedule(TimerTask task,Date time)
      安排在指定的时间执行指定的任务。如果此时间已过去,则安排立即执行该任务。
   E、public void cancel() 终止此计时器,丢弃所有当前已安排的任务。

例子1:A+B+E

 public class TimerDemo1 {
public static void main(String[] args) { //创建定时器对象
Timer t = new Timer(); // 安排在指定延迟后执行指定的任务。
//t.schedule(new MyTask(), 2000); //我想要在执行完任务后就停止运行
t.schedule(new MyTask(t), 2000);
}
}
//建立所要执行的任务
class MyTask extends TimerTask{
//用构造方法初始化定时器对象t
private Timer t;
public MyTask(){}
public MyTask(Timer t){
this.t = t;
}
@Override
public void run() {
System.out.println("爆炸");
t.cancel();
}
}

例子2:A+C+E

 /*
在指定时间执行一次任务,期后每隔特定时间就执行一次
*/
public class TimerDemo2 { public static void main(String[] args) {
// 创建定时器对象
Timer t = new Timer(); // 在指定时间执行一次任务,期后每隔特定时间就执行一次
t.schedule(new MyTask1(), 3000, 2000); }
} // 创建任务
class MyTask1 extends TimerTask {
@Override
public void run() {;
System.out.println("爆炸"); }
}

例子3:指定时间执行任务(指定时间删除目录)

 /*
需求:在指定的时间删除指定目录 demo
*/
public class TimerTest { public static void main(String[] args) throws ParseException {
// 创建定时器对象
Timer t = new Timer();
// 设定在10:38:40 进行删除
String s = "2016-10-12 10:38:40";
// 把字符串s解析为日期
SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// String - Date 进行解析 public Date parse(String source);
Date d = date.parse(s); // 进行定时器任务
t.schedule(new Delete(), d); }
}
// 创建任务
class Delete extends TimerTask { public void run() {
// 封装目录
File file = new File("demo");
// 删除
DeleteFile(file);
} // 删除目录
public void DeleteFile(File file) {
// 获取目录中的所有文件或文件夹的名称集合
File[] allfile = file.listFiles(); // 遍历集合
if (allfile != null) {// 目录不为空
for (File f : allfile) {
if (f.isDirectory()) {
// 如果是文件夹,就重新获取名称集合并遍历
DeleteFile(f);
} else {
//如果是文件,就删除。
System.out.println(f.getName()+ f.delete());
}
}
System.out.println(file.getName() + file.delete());
}
}
}

java 22 - 23 多线程之定时器的概述和使用例子的更多相关文章

  1. java 22 - 3 多线程的概述以及其它所涉及的东西(看)

    1:要想了解多线程,必须先了解线程,而要想了解线程,必须先了解进程,因为线程是依赖于进程而存在. 2:什么是进程? 通过任务管理器我们就看到了进程的存在. 而通过观察,就可以发现只有运行的程序才会出现 ...

  2. java 22 - 20 多线程之线程池

    程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互. 而使用线程池可以很好的提高性能,尤其是当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池. 线程池里的每一个线程代码结束后 ...

  3. java 22 - 12 多线程之解决线程安全问题的实现方式1

    从上一章知道了多线程存在着线程安全问题,那么,如何解决线程安全问题呢? 导致出现问题的原因: A:是否是多线程环境 B:是否有共享数据 C:是否有多条语句操作共享数据 上一章的程序,上面那3条都具备, ...

  4. java 22 - 9 多线程之 代码实现的方式2

    多线程的代码实现: 方式2:实现Runnable接口 步骤: A:自定义类MyRunnable实现Runnable接口 B:重写run()方法 C:创建MyRunnable类的对象 D:创建Threa ...

  5. java 22 - 7 多线程之控制线程的方法

    线程休眠(让线程休息一会再运行) public static void sleep(long millis) 在自定义线程类中添加该方法. 更改后,运行测试类,结果就是每执行完一轮,就休息1秒(这里设 ...

  6. java 22 - 4 多线程的代码实现的方式1

    需求:我们要实现多线程的程序. 如何实现呢? 由于线程是依赖进程而存在的,所以我们应该先创建一个进程出来. 而进程是由系统创建的,所以我们应该去调用系统功能创建一个进程. Java是不能直接调用系统功 ...

  7. java 22 - 21 多线程之多线程的代码实现方式3

    JDK5新增了一个Executors工厂类来产生线程池,有如下几个方法 A.public static ExecutorService newCachedThreadPool() B.public s ...

  8. java 22 - 19 多线程之生产者和消费者的代码优化

    在之前,是把生产者录入数据和消费者获取数据的所有代码都分别写在各自的类中. 这样不大好 这次把生产者和消费者部分关键代码都写入资源类中: package zl_Thread; public class ...

  9. java 22 - 18 多线程之 线程的状态转换、线程组

    线程的状态转换图解:图片 线程的线程组: 线程组: 把多个线程组合到一起.    它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制. 首先创建一个Runnable的实现类 publi ...

随机推荐

  1. MS15-020漏洞测试

    名称:Microsoft DLL植入远程代码执行漏洞(CVE-2015-0096)(MS15-020) 了解:Microsoft Windows没有正确处理DLL文件的加载,存在远程代码执行漏洞,通过 ...

  2. DevExpress VCL 13.1.4支持Delphi /C++Builder XE5

    DevExpress VCL 13.1.4支持Delphi /C++Builder XE5 重大变化 ExpressLibrary dxHalfOfPi常数声明已经从cxGeometry单元移到了cx ...

  3. 【Android】不依赖焦点和选中的TextView跑马灯

    前言 继承TextView,并仿照源码修改而来,主要是取消了焦点和选中了判断,也不依赖文本的宽度. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民 ...

  4. SVProgressHUD进度条蒙版

    GitHub:https://github.com/samvermette/SVProgressHUDSVProgressHUD和MBProgressHUD效果差不多,不过不需要使用协议,同时也不需要 ...

  5. LAMP配置虚拟目录

    1.  httpd.conf中添加 Listen 81 2. 1 <VirtualHost 127.0.0.2:81> 2 DocumentRoot E:\ws\2011\DiscuzSp ...

  6. IT软件开发常用英语词汇

    Aabstract 抽象的abstract base class (ABC)抽象基类abstract class 抽象类abstraction 抽象.抽象物.抽象性access 存取.访问access ...

  7. nodejs学习笔记(2)--Express下安装模版引擎ejs

    成功安装完express后,输入express -help,根据提示安装ejs(如下图): 根据提示-e实现安装ejs,注意此处有坑:之前安装的时候根据教程(node.js开发指南第五章5.2.2节) ...

  8. EMLS项目推进思考

    解决难度从小到大来看: 一.技术与运营层面1. 到企业级层面需要的技术与运营的支撑________前端推送__________________|________后台支撑系统_________|____ ...

  9. Asp.net MVC Razor模板引擎技巧分享

    Razor是Asp.net MVC中新的默认模板类型, 语法简单易用.这篇文章不涉及Razor的语法,主要介绍Razor的一些在MVC项目中的使用技巧,以及脱离MVC环境下,如何使用Razor. 阅读 ...

  10. 理解JavaScript中的原型继承(2)

    两年前在我学习JavaScript的时候我就写过两篇关于原型继承的博客: 理解JavaScript中原型继承 JavaScript中的原型继承 这两篇博客讲的都是原型的使用,其中一篇还有我学习时的错误 ...