文章目录
- 一、Timer 定时器基本使用
- 二、Timer 定时器常用用法
- 三、Timer 源码分析
- 四、Timer 部分源码注释
- 五、源码及资源下载
参考文档 :
- Timer 定时器 API 文档
- TimerTask 定时器任务 API 文档
Timer 可用于执行延迟任务或循环任务 ; 下面是定时器最基本用法 ;
1 . Timer 定时器基本使用 :
- 创建 Timer 定时器 : 调用构造函数创建定时器 Timer timer = new Timer() ;
- 分配 TimerTask 定时器任务 : 调用定时器的 schedule 方法 , 为 Timer 定时器分配 TimerTask 定时器任务 ;
timer.schedule(new TimerTask() {
@Override
public void run() {
// ...
}
}, 1_000);
2 . 定时器任务执行规则 : Timer 执行任务是 串行执行 的 , 同一时间只能执行一个任务 ;
在下面的示例中
- 任务 1 在 1 秒之后执行 , 在第 6 秒执行完毕 ;
- 任务 2 在第 6 秒 , 任务 1 执行完毕后 , 才开始执行 , 在第 11 秒执行完毕 ;
3 . 代码示例 :
private void timer(){
// Timer 可用于执行延迟任务或循环任务
Timer timer = new Timer();
/*
如果提交多个 TimerTask 定时器任务
需要等待之前的 定时器任务 执行完成 , 才能执行后面的任务
TimerTask 实现了 Runnable 接口
延迟 1 秒执行任务 1 ( 任务 1 时长 5 秒 )
延迟 2 秒执行任务 2 ( 任务 2 时长 5 秒 )
Timer 执行任务是串行执行的 , 同一时间只能执行一个任务
任务 1 在 1 秒之后执行 , 在第 6 秒执行完毕
任务 2 在第 6 秒 , 任务 1 执行完毕后 , 才开始执行 , 在第 11 秒执行完毕
*/
// 延迟 1 秒执行任务 1
timer.schedule(new TimerTask() {
@Override
public void run() {
Log.i(TAG, "延迟 1 秒执行 5 秒的任务 1 开始执行");
try {
Thread.sleep(5_000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.i(TAG, "延迟 1 秒执行 5 秒的任务 1 执行完毕");
}
}, 1_000);
// 延迟 2 秒执行任务 2
timer.schedule(new TimerTask() {
@Override
public void run() {
Log.i(TAG, "延迟 2 秒执行 5 秒的任务 2 开始执行");
try {
Thread.sleep(5_000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.i(TAG, "延迟 2 秒执行 5 秒的任务 2执行完毕");
}
}, 2_000);
}
二、Timer 定时器常用用法
1 . Timer 定时器构造函数 :
① 创建默认定时器 : 默认以 “Timer-序列号” 作为定时器线程名称 ;
public Timer() { this("Timer-" + serialNumber()); }
② 创建守护线程定时器 : 指定定时器是否作为守护线程来执行 , 定时器线程名称是默认名称 ;
public Timer(boolean isDaemon) { this("Timer-" + serialNumber(), isDaemon); }
③ 创建定时器并指定定时器名称 : 创建定时器 , 并 设置定时器线程名称 ;
public Timer(String name) {
thread.setName(name);
thread.start();
}
④ 指定名称并设置守护线程 : 同时 设置定时器名称 , 并 设置定时器是否是守护线程 ;
public Timer(String name, boolean isDaemon) {
thread.setName(name);
thread.setDaemon(isDaemon);
thread.start();
}
2 . 定时器调度方法 :
① 在指定一段时间后执行定时器任务 : 在 delay 毫秒后 , 执行 TimerTask 定时器任务 ;
public void schedule(TimerTask task, long delay) {
if (delay
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?