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

在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. C/C++构建系统 CMake

    Cmake实践 Cmake Practice –Cjacker cmake是kitware公司以及一些开源开发者在开发几个工具套件(VTK)的过程中衍 生品,最终形成体系,成为一个独立的开放源代码项目 ...

  2. Android中的Interpolator

    Android中的Interpolator Interpolator用于动画中的时间插值,其作用就是把0到1的浮点值变化映射到另一个浮点值变化. 本文列出Android API提供的Interpola ...

  3. 根据键盘调整textField(多个)位置使其不会被键盘挡住

    当一个界面上有个textField时,键盘出现时需要保证textField不会被键盘挡住. 一般的做法是,监听 UIKeyboardWillShowNotification和 UIKeyboardWi ...

  4. IOS整体项目层级构建

    在创建IOS项目时,若有一个比较明确的层级架构,将对于今后代码的维护或者功能的扩展很有帮助:本文将通过一个实例来展现我对于层级的一些观点:里面有一些零碎的知识点可能无法全部介绍,到时提供源代码进行下载 ...

  5. 【Android疑难杂症】GridView动态设置Item的宽高导致第一个Item不响应或显示不正常的问题

    前言 这个问题在之前做一个盒子项目时遇到过,最近又遇到了,使用GridView遇到的非常奇葩的问题,这里记录分享一下. 声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnb ...

  6. 【原】你真的懂iOS的autorelease吗?

    或许这个题目起得有点太高调了,不过我只是想纠正一些童鞋对于autorelease的认识,如果能帮到几个人,那这篇文章也就值得了!当然,高手请绕道 本文主要探讨两个方面:(1)autorelease对象 ...

  7. IOS TextField伴随键盘移动

    这篇文章介绍的是一个简单而又实用的小方法. 我想对于登陆时的一些效果大家应该都不会陌生. 今天就介绍一下,当开始输入TextField文本时键盘弹出TextField伴随键盘移动的实现. 先看一下演示 ...

  8. 关于iOS构建版本提交iTunes后,一直不出现,没加号的解决方案

    最近第一次遇到,正常打包,上传iTunes App Store,都能正常upload. 也可能是因为刚升了Xcode 8 的缘故,莫名其妙的小问题... 描述如下: 如果进iTunes的活动界面,也能 ...

  9. linux 文件管理以及其相关指令

    Linux简介 严格的来讲,Linux 不算是一个操作系统,只是一个 Linux 系统中的内核, 即计算机软件与硬件通讯之间的平台:Linux的全称是GNU/Linux,这才算是一个真正意义上的Lin ...

  10. C++ 笔记(一) —— 尽量以 const、enum、inline 替换 #define

    ilocker:关注 Android 安全(新手) QQ: 2597294287 #define ASPECT_RATIO 1.653 记号 ASPECT_RATIO 不会进入 symbol tabl ...