什么是任务调度?

在实际业务中,我们经常需要定时、定期、或者多次完成某些任务,对这些任务进行管理,就是任务调度。任务调度与多线程密切相关。

任务调度有多种方式

Timer与TimerTask配合

Timer 定时器,能在主线程外另起线程完成任务。

TimerTask 实现Runnable接口的抽象类,相当于一个任务

来一个简单的例子:

import java.util.Timer;
import java.util.TimerTask; public class TestTimer { public static void main(String args[]){
new Reminder(3);
System.out.println("调度完成。");
} public static class Reminder{
Timer timer; public Reminder(int sec){
timer = new Timer();
       //开始调度任务
timer.schedule(new TimerTask(){
public void run(){
System.out.println("时间到!");
            //重要:终止内部线程!
timer.cancel();
}
}, sec*1000);
}
}
}

会输出:

调度完成。

时间到!

原理:Timer的构造函数里会起一个单独的线程(new Thread())来执行计划任务,并在任务完成后结束线程。

Timer如何终止内部线程?

1、调用timer的cancle方法(最常用,如上例)

2、把timer线程设置成daemon线程,(new Timer(true)创建daemon线程),在jvm里,如果所有用户线程结束,那么守护线程也会被终止,不过这种方法一般不用。

3、当所有任务执行结束后,删除对应timer对象的引用,线程也会被终止。

4、调用System.exit方法终止程序

注意点:

1、每一个Timer仅对应唯一一个线程。

2、Timer不保证任务执行的十分精确。

3、Timer类的线程安全的。

任务调度之Timer与TimerTask配合的更多相关文章

  1. java任务调度之Timer定时器

    定时器相信大家都不陌生,平时使用定时器就像使用闹钟一样,我们可以在固定的时间做某件事,也可以在固定的时间段重复做某件事,今天就来分析一下java中自带的定时任务器Timer. 一.Timer基本使用 ...

  2. JDK中的Timer和TimerTask详解(zhuan)

    http://www.cnblogs.com/lingiu/p/3782813.html ************************************************** 目录结构 ...

  3. Timer和TimerTask

    目录结构: Timer和TimerTask 一个Timer调度的例子 如何终止Timer线程 关于cancle方式终止线程 反复执行一个任务 schedule VS. scheduleAtFixedR ...

  4. Java中定时器相关实现的介绍与对比之:Timer和TimerTask

    Timer和TimerTask JDK自带,具体的定时任务由TimerTask指定,定时任务的执行调度由Timer设定.Timer和TimerTask均在包java.util里实现. 本文基于java ...

  5. Java并发编程:Timer和TimerTask(转载)

    Java并发编程:Timer和TimerTask(转载) 下面内容转载自: http://blog.csdn.net/xieyuooo/article/details/8607220 其实就Timer ...

  6. Java线程:Timer和TimerTask

    Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口. Timer是一种线程设施,用于安排以后在后台线程中执行的任务.可安排任务执 ...

  7. Java中的Timer和TimerTask在Android中的用法(转)

    转自:http://blog.csdn.net/zuolongsnail/article/details/8168689 在开发中我们有时会有这样的需求,即在固定的每隔一段时间执行某一个任务.比如UI ...

  8. Java定时任务Timer、TimerTask与ScheduledThreadPoolExecutor详解

     定时任务就是在指定时间执行程序,或周期性执行计划任务.Java中实现定时任务的方法有很多,本文从从JDK自带的一些方法来实现定时任务的需求. 一.Timer和TimerTask  Timer和Tim ...

  9. Timer与TimerTask的真正原理&使用介绍

    转载: Timer与TimerTask的真正原理&使用介绍 其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个类,而具体的TimerTask需要由你自己来 ...

随机推荐

  1. 计蒜客 31453 - Hard to prepare - [递归][2018ICPC徐州网络预赛A题]

    题目链接:https://nanti.jisuanke.com/t/31453 After Incident, a feast is usually held in Hakurei Shrine. T ...

  2. Pandas的loc方法

    当你读取到DataFrame的数据时,想去定位某一个数据项,可以使用loc方法进行查找,之后你可以赋值给他. import pandas as pd df = pd.read_csv('file_na ...

  3. CCCC 排座位 图着色问题

    1排座位:https://www.patest.cn/contests/gplt/L2-010 2图着色问题 https://www.patest.cn/contests/gplt/L2-023 建图 ...

  4. laravel5.1接收ajax数据

    前台: $.ajax({ type: 'POST', url: '{!! url('aw/data') !!}', data:{'_token':'<?php echo csrf_token() ...

  5. complexity_action

    大话数据结构 /* 顺序存储的结构 */ #define MAXSIZE 20 //存储空间初始分配量 typedef int ElemType; //ElemType类型根据实际情况而定,这里假设为 ...

  6. Borg Maze---poj3026最小生成树+bfs

    题目链接:http://poj.org/problem?id=3026 题意:可以理解为给你一个地图上面有S和A的表示一个一个的点,#表示墙,所以需要我们用bfs来计算各点之间的距离: b[i][j] ...

  7. 高并发秒杀系统方案(分布式session)

    编程要有一个习惯:做参数校验 所谓的分布式session:就是用redis统一管理session. 我们这里的思路是:把token写入cookie中,客户端在随后的访问中携带cookie,服务端就能根 ...

  8. 如何让dedecms文章点击量增加一定的数值

    用dedecms建站都知道有一个文章点击量这个参数,我们可不可以用这个浏览量做些延伸扩展呢?比如加上一个固定值变成另外一个指标.很多朋友已经想到了,如下图,我们将本文浏览量286设为点击量,加上300 ...

  9. android studio常用控件

    1.Button设置不同的样式 <?xml version="1.0" encoding="utf-8"?> <selector xmlns: ...

  10. Unity注意事项

    1.尽量避免出现中文路径 2.做2D游戏时,图片最好要与背景图片保持一定距离 以免重叠