java 22 - 23 多线程之定时器的概述和使用例子
定时器是一个应用十分广泛的线程工具,可用于调度多个定时任务以后台线程的方式执行。
在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 多线程之定时器的概述和使用例子的更多相关文章
- java 22 - 3 多线程的概述以及其它所涉及的东西(看)
1:要想了解多线程,必须先了解线程,而要想了解线程,必须先了解进程,因为线程是依赖于进程而存在. 2:什么是进程? 通过任务管理器我们就看到了进程的存在. 而通过观察,就可以发现只有运行的程序才会出现 ...
- java 22 - 20 多线程之线程池
程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互. 而使用线程池可以很好的提高性能,尤其是当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池. 线程池里的每一个线程代码结束后 ...
- java 22 - 12 多线程之解决线程安全问题的实现方式1
从上一章知道了多线程存在着线程安全问题,那么,如何解决线程安全问题呢? 导致出现问题的原因: A:是否是多线程环境 B:是否有共享数据 C:是否有多条语句操作共享数据 上一章的程序,上面那3条都具备, ...
- java 22 - 9 多线程之 代码实现的方式2
多线程的代码实现: 方式2:实现Runnable接口 步骤: A:自定义类MyRunnable实现Runnable接口 B:重写run()方法 C:创建MyRunnable类的对象 D:创建Threa ...
- java 22 - 7 多线程之控制线程的方法
线程休眠(让线程休息一会再运行) public static void sleep(long millis) 在自定义线程类中添加该方法. 更改后,运行测试类,结果就是每执行完一轮,就休息1秒(这里设 ...
- java 22 - 4 多线程的代码实现的方式1
需求:我们要实现多线程的程序. 如何实现呢? 由于线程是依赖进程而存在的,所以我们应该先创建一个进程出来. 而进程是由系统创建的,所以我们应该去调用系统功能创建一个进程. Java是不能直接调用系统功 ...
- java 22 - 21 多线程之多线程的代码实现方式3
JDK5新增了一个Executors工厂类来产生线程池,有如下几个方法 A.public static ExecutorService newCachedThreadPool() B.public s ...
- java 22 - 19 多线程之生产者和消费者的代码优化
在之前,是把生产者录入数据和消费者获取数据的所有代码都分别写在各自的类中. 这样不大好 这次把生产者和消费者部分关键代码都写入资源类中: package zl_Thread; public class ...
- java 22 - 18 多线程之 线程的状态转换、线程组
线程的状态转换图解:图片 线程的线程组: 线程组: 把多个线程组合到一起. 它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制. 首先创建一个Runnable的实现类 publi ...
随机推荐
- Emacs学习心得之 基础配置
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Emacs学习心得之 基础配置 1.前言2.基础配置 一.前言 本篇博文记录了Emacs的一 ...
- Android上传图片到PHP服务器并且支持浏览器上传文件(word、图片、音乐等)
暑假已经过了一半了,这才完成计划当中的第二个任务.虽然进度是慢了点.但也算是暑假的收获吧.下面我就把我学习当中的收获记录在此. 还是跟以往一样,先上图片. 操作的步骤:打开程序---->选择上传 ...
- android加固系列—4.加固前先学会破解,无源码调试apk
[版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5138585.html] 项目关键java代码为,将tv设置为从jni读取的字符串,这里的破解内 ...
- 【代码笔记】iOS-评分系统(小星星)
一,效果图. 二,工程图. 三,代码. RootViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additi ...
- myIsEqualToString
BOOL myisEqualToString(NSString * str1 , NSString * str2){ //1.如果两个字符串,指针地址相等,就说明一定是相等 if(str1 == st ...
- android 界面设计基本知识Ⅱ
上一章讲述了Android界面设计时,一些基本控件的使用,本章主要讲述自定义控件,Fragment和Headler线程机制. 1.自定义控件 (1)基本知识 dp.sp和dx px:像素点 ...
- JavaScript SetInterval与setTimeout使用方法详解
setTimeout和setInterval的语法相同.它们都有两个参数,一个是将要执行的代码字符串,还有一个是以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码.不过这两个函数还是有区别的 ...
- js 继承
ECMAScript只支持实现继承(继承实际的方法),主要依靠原型链来实现. 1.原型链 基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法. 示例: function SuperType ...
- [转]从JVM角度看线程安全与垃圾收集
线程安全 Java内存模型中,程序(进程)拥有一块内存空间,可以被所有的线程共享,即MainMemory(主内存):而每个线程又有一块独立的内存空间,即WorkingMemory(工作内存).普通情况 ...
- 玩转CSS3,嗨翻WEB前端,CSS3伪类元素详解/深入浅出[原创][5+3时代]
在我的上一篇博客中, 很多园友提出说对css3"画图"不是很理解, 在跟他们私聊了一段时间以后,加上自己在开始自学css3的时候的疑惑,我觉得大家之所以不是很理解主要是因为对伪元素 ...