Timer主要用于Java线程里指定时间或周期运行任务,它是线程安全的,但不提供实时性(real-time)保证。

  

  上面提到了守护线程的概念。

  Java分为两种线程:用户线程和守护线程。

  所谓守护线程,是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。因 此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。反过来说,只要任何非守护线程还在运行,程序就不会终止。

  守护线程和用户线程的唯一不同之处就在于虚拟机的离开:如果用户线程已经全部退出运行了,只剩下守护线程存在了,虚拟机也就退出了。 因为没有了被守护者,守护线程也就没有工作可做了,也就没有继续运行程序的必要了。

  将线程转换为守护线程可以通过调用Thread对象的setDaemon(true)方法来实现。在使用守护线程时需要注意以下几点:

  (1) thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个IllegalThreadStateException异常。你不能把正在运行的常规线程设置为守护线程。

  (2) 在Daemon线程中产生的新线程也是Daemon的。

  (3) 守护线程应该永远不去访问固有资源,如文件、数据库,因为它会在任何时候甚至在一个操作的中间发生中断。

  

  我们接下来写个案例,使得程序运行3秒后在控制台打印输出“该起床了”。  

package com.itszt.test7;
import java.text.SimpleDateFormat;
import java.util.Timer;
import java.util.TimerTask;
/**
* Java计时器
*/
public class TimerTest {
static String str="HH:mm:ss";
static SimpleDateFormat dateFormat = new SimpleDateFormat(str); public static void main(String[] args) {
Timer timer = new Timer();
String now1 = dateFormat.format(System.currentTimeMillis());
System.out.println(now1);
//延迟3秒后执行任务
timer.schedule(new MyTask(),3000);//单位是毫秒
}
}
class MyTask extends TimerTask{
@Override
public void run() {
System.out.println("该起床了");
String now2 = TimerTest.dateFormat.format(System.currentTimeMillis());
System.out.println(now2);
}
}

  上述代码执行后,延迟3秒打印出“该起床了”,如下所示:

21:26:18
该起床了
21:26:21

  Timer的其他方法:

  schedule(TimerTask task, Date time)  在指定的日期执行一次TimerTask任务;如果日期time早于当前时间,则立刻执行。

  schedule(TimerTask task, long delay, long period)  以当前时间为基准,延迟指定的毫秒后,再按指定的时间间隔地无限次数的执行TimerTask任务。

  schedule(TimerTask task, Date firstTime, long period)  在指定的日期之后,按指定的时间间隔地无限次数的执行TimerTask任务。

  scheduleAtFixedRate(TimerTask task, long delay, long period)  以当前时间为基准,延迟指定的毫秒后,再按指定的时间间隔周期性地无限次数的执行TimerTask任务。

Java的Timer定时器的更多相关文章

  1. java的Timer定时器任务

    在项目开发中,经常会遇到需要实现一些定时操作的任务,写过很多遍了,然而每次写的时候,总是会对一些细节有所遗忘,后来想想可能是没有总结的缘故,所以今天小编就打算总结一下可能会被遗忘的小点: 1. pub ...

  2. java Timer定时器管理类

    1.java timer类,定时器类.启动执行定时任务方法是timer.schedule(new RemindTask(), seconds*1000);俩参数分别是TimerTask子类,具体执行定 ...

  3. 定时任务:Java中Timer和TimerTask的使用

    java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks. 一个TimerTask实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内,TimerT ...

  4. Java中Timer和TimerTask的使用

    转自:http://www.cdtarena.com/javapx/201306/8893.html java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks. 一个 ...

  5. java.util.Timer类似于闹钟定时做任务

    在web中实现任务计划,相当于实现闹钟的功能,要完成2个步骤: 1.定时器的设置: 2.对这个定时器的启动运行和停止进行实时监听 java.util.Timer定时器,实际上是个线程,定时调度所拥有的 ...

  6. Java Timer定时器时,每次重复执行了两次任务的解决方案

    web.xml监听配置 com.numenzq.mc.service.impl.TimerListener TimerListener类 public class TimerListener impl ...

  7. JAVA TIMER定时器

    备注:类实现ServletContextListener,在web.xml配置,之后服务启动该定时器类自动加载 package com.leadlt.common.util; import java. ...

  8. Java 中Timer和TimerTask 定时器和定时任务使用的例子

    转自:http://blog.csdn.net/kalision/article/details/7692796 这两个类使用起来非常方便,可以完成我们对定时器的绝大多数需求 Timer类是用来执行任 ...

  9. JAVA Timer定时器使用方法(二)

    JAVA  Timer 定时器测试 MyTask.java:package com.timer; import java.text.SimpleDateFormat;import java.util. ...

随机推荐

  1. 【BZOJ5251】【八省联考2018】劈配(网络流,二分答案)

    [BZOJ5251][八省联考2018]劈配(网络流,二分答案) 题面 洛谷 BZOJ Description 一年一度的综艺节目<中国新代码>又开始了. Zayid从小就梦想成为一名程序 ...

  2. 【HDU5919】SequenceII(主席树)

    [HDU5919]SequenceII(主席树) 题面 Vjudge 翻译(by ppl) 给一个长度为N的数列A,有m个询问,每次问 数列[l,r]区间中所有数的第一次出现的位置的中位 数是多少 题 ...

  3. 洛谷 P2261 [CQOI2007]余数求和 解题报告

    P2261 [CQOI2007]余数求和 题意: 求\(G(n,k)=\sum_{i=1}^n k \ mod \ i\) 数据范围: \(1 \le n,k \le 10^9\) \(G(n,k)\ ...

  4. 【bzoj2707】走迷宫

    Portal --> bzoj2707 Solution 首先题目有一个十分明显的暗示..强联通分量..那肯定就是要tarjan一波咯 先看看什么情况下会\(INF\),其实就是题目里面讲的两种 ...

  5. 【DP】【P5007】 DDOSvoid 的疑惑

    Description 给定一棵以 1 为根的有根树,定义树的一个毒瘤集为一个集合,并且集合中任意两个元素之间不存在祖先与后代关系. 定义一个毒瘤集的毒瘤指数为集合内所有元素的价值之和 要求给定树的所 ...

  6. poj 3261 后缀数组 可重叠的 k 次最长重复子串

    Milk Patterns Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 16430   Accepted: 7252 Ca ...

  7. js 时间戳 和 格式化时间转化

    function timestampToTime(timestamp) { var date = new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的 ...

  8. Java中关于Arrays.asList方法的深入学习与理解

    Java的标准库中在java.util包下提供了很多实用的工具类,如:Arrays,Collections等工具类都提供了一些比较实用的方法.在实际的开发使用中,我们经常需要使用这样的需求:将一个数组 ...

  9. React读取Excel——js-xlsx 插件的使用

    介绍 SheetJS js-xlsx 是一款能够读写多种格式表格的插件,浏览器支持良好,并且能在多个语言平台上使用,目前在 github 上有 12602 个 star, 刚好项目中遇到了前端解析 e ...

  10. My97DatePicker 报错 My97DP is not defined

    https://blog.csdn.net/BoomLee/article/details/80967926