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

在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. 如何在sharepoint2010中配置Google Anlytics 分析服务

      简介 Google Analytics(分析)不仅可以帮助您衡量销售与转化情况,而且能为您提供新鲜的深入信息,帮助您了解访问者如何使用您的网站,他们如何到达您的网站,以及您可以如何吸引他们不断回访 ...

  2. 学习笔记:腾讯云——服务器mysql操作

    1.进入数据库 (注意:在linux系统下要进入mysql所在的文件夹下才能打开数据库) 操作1:进入到指定目录下 命令行:cd /opt/lampp/bin 操作2:进入到数据库 命令行:./mys ...

  3. JavaScript学习04 对象

    JavaScript学习04 对象 默认对象 日期对象Date, 格式:日期对象名称=new Date([日期参数]) 日期参数: 1.省略(最常用): 2.英文-数值格式:月 日,公元年 [时:分: ...

  4. 微信小程序如何设置开发者和体验者

    微信小程序需要在后台添加开发者和体验者 开发者:增加开发人员的,开发人员添加后,可上传代码,最多10个人,可以删除 体验者:添加为体验者,管理员发布体验版本后,通过扫码二维码可以下载体验版小程序,最多 ...

  5. 关于OC中的block自己的一些理解(一)

    一.关于block 1.block的作用:保存一段代码. 2.苹果官方推荐的一种语法,类似于C语言的函数,但是比函数更加灵活. 3.^是block语法的标识. 二.block的用法 1)无返回值无参数 ...

  6. 使用Gradle构建构建一个Java Web工程及持续集成环境Jenkins配置

    安装Eclipse插件——Buildship 什么是Buildship? Buildship能方便我们通过Eclipse IDE创建和导入Gradle工程,同时还能执行Gradle任务. Eclips ...

  7. jstree动态生成树

    前篇文章简单介绍了静态生成树,这篇文章将通过后台把数据通过json形式传到前台,进行动态生成树. 本篇的程序所用框架为Spring MVC,可以很方便的通过controller层传json到前台. 前 ...

  8. sql语句 在字段前面加0

    目前数字如下: 1 2 3 10 想变成长度为5位,如果不够,前面补0, 写法如下 select right('00000'+ltrim(你的字段),5) 结果: 00001 00002 00003 ...

  9. Oracle systemstate dump介绍

    当数据库出现严重的性能问题或者hang起的时候,那么我们非常需要通过systemstate dump来知道进程在做什么,在等待什么,谁是资源的持有者,谁阻塞了别人.在出现上述问题时,及时收集syste ...

  10. javascript-适配器模式

    适配器模式笔记 将一个类(对象)的接口(方法或属性)转化成另一个接口,以满足用户需求,使类(对象)之间接口的不兼容性问题通过适配器方法得以解决 demo实例:1.适配参数对象,使传入的参数完整 2.适 ...