Android(java)学习笔记16:多线程 - 定时器概述和使用
1. 定时器:
定时器是一个应用十分广泛的线程工具,可用于调度多个定时任务以后台线程的方式执行。
在Java中,可以通过Timer和TimerTask类来实现定义调度的功能
Timer
public Timer()
public void schedule(TimerTask task, long delay)
public void schedule(TimerTask task,long delay,long period)
TimerTask---抽象类
public abstract void run()
public boolean cancel()
开发中 Quartz是一个完全由java编写的开源调度框架。
2. 下面我们用于代码示例进行讲解:
public void schedule(TimerTask task, long delay)
- package cn.itcast_12;
- import java.util.Timer;
- import java.util.TimerTask;
- /*
- * 定时器:可以让我们在指定的时间做某件事情,还可以重复的做某件事情。
- * 依赖Timer和TimerTask这两个类:
- * Timer:定时
- * public Timer()
- * public void schedule(TimerTask task,long delay)
- * public void schedule(TimerTask task,long delay,long period)
- * public void cancel()
- * TimerTask:任务
- */
- public class TimerDemo {
- public static void main(String[] args) {
- // 创建定时器对象
- Timer t = new Timer();
- // 3秒后执行爆炸任务
- // t.schedule(new MyTask(), 3000);
- //结束任务
- t.schedule(new MyTask(t), 3000);
- }
- }
- // 做一个任务
- class MyTask extends TimerTask {
- private Timer t;
- public MyTask(){}
- public MyTask(Timer t){
- this.t = t;
- }
- @Override
- public void run() {
- System.out.println("beng,爆炸了");
- t.cancel(); // 保证 TimerTask中run任务执行完毕,才能取消定时器。因此我们这里才会在这个位置使用Timer的cancel方法
- }
- }
public void schedule(TimerTask task,long delay,long period)
- package cn.itcast_12;
- import java.util.Timer;
- import java.util.TimerTask;
- /*
- * 定时器:可以让我们在指定的时间做某件事情,还可以重复的做某件事情。
- * 依赖Timer和TimerTask这两个类:
- * Timer:定时
- * public Timer()
- * public void schedule(TimerTask task,long delay)
- * public void schedule(TimerTask task,long delay,long period)
- * public void cancel()
- * TimerTask:任务
- */
- public class TimerDemo2 {
- public static void main(String[] args) {
- // 创建定时器对象
- Timer t = new Timer();
- // 3秒后执行爆炸任务第一次,如果不成功,每隔2秒再继续炸
- t.schedule(new MyTask2(), 3000, 2000);
- }
- }
- // 做一个任务
- class MyTask2 extends TimerTask {
- @Override
- public void run() {
- System.out.println("beng,爆炸了");
- }
- }
3. 定时删除指定带内容的目录
- package cn.itcast_12;
- import java.io.File;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.Timer;
- import java.util.TimerTask;
- /*
- * 需求:在指定的时间删除我们的指定目录(你可以指定c盘,但是我不建议,我使用项目路径下的demo)
- */
- class DeleteFolder extends TimerTask {
- @Override
- public void run() {
- File srcFolder = new File("demo");
- deleteFolder(srcFolder);
- }
- // 递归删除目录
- public void deleteFolder(File srcFolder) {
- File[] fileArray = srcFolder.listFiles();
- if (fileArray != null) {
- for (File file : fileArray) {
- if (file.isDirectory()) {
- deleteFolder(file);
- } else {
- System.out.println(file.getName() + ":" + file.delete());
- }
- }
- System.out.println(srcFolder.getName() + ":" + srcFolder.delete());
- }
- }
- }
- public class TimerTest {
- public static void main(String[] args) throws ParseException {
- Timer t = new Timer();
- String s = "2014-11-27 15:45:00";
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- Date d = sdf.parse(s);
- t.schedule(new DeleteFolder(), d);
- }
- }
Android(java)学习笔记16:多线程 - 定时器概述和使用的更多相关文章
- 【原】Java学习笔记032 - 多线程
package cn.temptation; public class Sample01 { public static void main(String[] args) { /* * [进程]:正在 ...
- Java学习笔记之——多线程
多线程编程 程序: 进程:一个程序运行就会产生一个进程 线程:进程的执行流程,一个进程至少有一个线程,称为主线程 如:QQ聊着天,同时在听音乐 一个进程可以有多个线程,多个线程共享同一个进程的资源 线 ...
- Java学习笔记:多线程(一)
Java中线程的五种状态: 新建状态(New) 就绪状态(Runnable) 运行状态(Running) 阻塞状态(Blocked) 凋亡状态(Dead) 其中阻塞状态(Blocked)又分为三种: ...
- JAVA学习笔记16——线程的创建和启动
Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.每个线程的作用是完成一定的任务,实际上就是执行一段程序流(一段顺序执行的代码).Java使用线程执行体来代表这段 ...
- java学习笔记(5)多线程
一.简介(过段时间再写,多线程难度有点大) --------------------------------------- 1.进程:运行时的概念,运行的应用程序 2.线程:应用程序内部并发执行的代码 ...
- Java 学习笔记(16)——Java数据库操作
数据库操作是程序设计中十分重要的一个部分,Java内置JDBC来操作数据库 JDBC使用 JDBC--Java Database connecting Java数据库连接:本质上JDBC定义了操作数据 ...
- Java 学习笔记(11)——多线程
Java内部提供了针对多线程的支持,线程是CPU执行的最小单位,在多核CPU中使用多线程,能够做到多个任务并行执行,提高效率. 使用多线程的方法 创建Thread类的子类,并重写run方法,在需要启动 ...
- Java学习笔记16(面向对象九:补充内容)
总是看到四种权限,这里做一个介绍: 最大权限是public,后面依次是protected,default,private private修饰的只在本类可以使用 public是最大权限,可以跨包使用,不 ...
- Java学习笔记:多线程(二)
与线程生命周期相关的方法: sleep 调用sleep方法会进入计时等待状态,等待时间到了,进入就绪状态. yield 调用yield方法会让别的线程执行,但是不确保真正让出.较少使用,官方注释都说 ...
- java学习笔记16(正则表达式)
正则表达式: 定义:在pattern类中有简单规则定义,具有特殊含义的字符串: 作用:用于一些字符串,比如验证注册邮箱,密码,用户名等: 正则表达式的语法: 1)字符:'\'反斜杠 \t 代表制表 ...
随机推荐
- Android应用捕获全局异常自定义处理
[2016-06-30]最新的全局异常处理DRCrashHandler已经集成在DR_support_lib库中 具体请看: https://coding.net/u/wrcold520/p/DR_s ...
- 深度学习(五)基于tensorflow实现简单卷积神经网络Lenet5
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/8954892.html 参考博客:https://blog.csdn.net/u01287127 ...
- xss攻击汇总--转
(1)普通的XSS JavaScript注入<SCRIPT SRC=http://3w.org/XSS/xss.js></SCRIPT>(2)IMG标签XSS使用JavaScr ...
- js判断下拉框改变状态
<script> $('#questSort').change(function(){ //此处写状态改变要实现的功能 var s=$('#questSort').children('op ...
- Path类 操作文件类
// Path类 IO命名空间 静态类 不能创建对象类名. string str =@"E:\C#程序设计基础入门教程\(第十一天)\122\22\nee.txt"; ////in ...
- LINQ和.NET数据访问
.NET数据访问 在.NET中对于数据的访问大致有三个层面,数据访问层.内存数据集.业务逻辑层.数据层,包括了XML配置文件以及一些常用的数据库(使用SQL语句):内存数据集,主要是DataSet数据 ...
- 一个简单问题引发对IEnumerable和IQueryable的思考
问题概述: 首先看下图,有客户表和客户负责人表关系是多对多,访问数据库使用的是EF所以这里我们开启了延迟加载,需求就是将每个客户的所有负责人逗号拼接显示在负责人这一栏位, 对你没看错需求就是这么 ...
- 设计模式之职责链模式(JAVA实现)
学习netty框架时,看到有人说netty用到了设计模式的职责链模式,学习一下职责链模式,主要参考大话设计模式. 主要场景: 小菜想要加薪,向经理提出加薪请求,经理没有权限,经理交由总监处理,总监也没 ...
- 微服务学习笔记二:Eureka服务注册发现
Eureka服务注册发现 服务发现:云端负载均衡,一个基于 REST 的服务,用于定位服务,以实现云端的负载均衡和中间层服务器的故障转移. 1. Service Discovery: Eureka S ...
- 阿里云服务器Linux常用命令
系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...