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 ...
随机推荐
- Atitti.java android反编译解决方案-----虚拟机方案
Atitti.java android反编译解决方案-----虚拟机方案 哈哈,终极解决方案是虚拟机...c++也可以反编译为汇编代码,但无需担心,因为读懂汇编太麻烦..只要不能拿到c++源码就可.. ...
- Ubuntu 16.04 LTS 安装配置 Nginx 1.10.0 Php7.0-FPM
1. 安装Nginx,Php-7.0 ~$ sudo add-apt-repository ppa:nginx/stable ~$ sudo apt-get update ~$ sudo apt-ge ...
- C阶段【02】 - 分支结构
知识重点: BOOL布尔类型 关系运算符 逻辑运算符 if语句 枚举类型 switch语句 一.BOOL布尔类型 用来存储“真”或者“假”,变了只有YES和NO两个值.YES(1)表示表达式结果为真, ...
- UITextField限制中英文字数和光标定位以及第三方输入限制问题
先自定义一个UITextField的子类HLNavTextField,在控制器里调用子类的- (void)limitHansLength:(int)hans otherLength:(int)othe ...
- drawable以及Bitmap的基本操作
一.drawable 图形对象,可以转载常用格式的图像,可能是(位图)Bitmapdrawable,或者shapedrawable(图形),还可能是多种其他图片格式GIF,PNG,JEPG 二.Bi ...
- GitHub 上有哪些完整的 iOS-App 源码值得参考?
1. Coding iOS 客户端 Coding官方客户端. 笔者强烈推荐的值得学习的完整APP.GitHub - Coding/Coding-iOS: Coding iOS 客户端源代码 2. OS ...
- go的环境变量设置
GOROOT go的安装路劲 如:D:\Program Files\Go GOPATH go的工作路径 GOPATH可以设置多个.存放包文件.比如你引入 "xxx"包.那么go会去 ...
- 最新Internet Download Manager (IDMan) 6.25 Build 20 32位 64位注册破解补丁
0x00 IDMan介绍 Internet Download Manager提升你的下载速度最多达5倍,安排下载时程,或续传一半的软件.Internet Download Manager的续传功能可以 ...
- 字符集GBK升级UTF8
在生产环境中,数据库字符集因为各种原因需要升级,比如为了支持汉字,从latin1字符集升级到GBK,后面为了支持多个语言文字,需要将GBK升级到UTF8等.迁移过程网上有很多,我今天主要想讲下字符集转 ...
- SQLHelp帮助类
public readonly static string connStr = ConfigurationManager.ConnectionStrings["conn"].Con ...