package timer;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /*2015-10-29*/
public class JDKTimer {
private static final Logger LOGGER = LoggerFactory.getLogger(JDKTimer.class); public static void main(String[] args) {
Timer timer = new Timer();
LOGGER.info("10秒钟后执行定时器一...");
timer.schedule(new TimerTask() { @Override
public void run() {
LOGGER.info(Thread.currentThread() + ":定时器一执行完毕。。。");
}
}, 10 * 1000); LOGGER.info("60秒后准备执行定时器二。。。");
timer.schedule(new TimerTask() { @Override
public void run() {
LOGGER.info(Thread.currentThread() + ":定时器二执行完毕。。。");
}
}, getNext1Minute()); LOGGER.info("准备执行定时器三。。。");
timer.schedule(new TimerTask() { @Override
public void run() {
LOGGER.info(Thread.currentThread() + ":10秒后再执行定时器三。。。");
}
}, new Date(), 10 * 1000); } private static Date getNext1Minute() {
return new Date(System.currentTimeMillis() + 60 * 1000);
}
}

log4j.properties

log4j.rootLogger=all, R1,console
log4j.appender.R1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R1.File=log/test.log
log4j.appender.R1.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.R1.layout=org.apache.log4j.PatternLayout
log4j.appender.R1.layout.ConversionPattern=[%d] [%t] %p - %m%n log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%d] [%t] %p - %m%n

Output:

[2015-10-29 22:28:47,731] [main] INFO - 10秒钟后执行定时器一...
[2015-10-29 22:28:47,731] [main] INFO - 60秒后准备执行定时器二。。。
[2015-10-29 22:28:47,731] [main] INFO - 准备执行定时器三。。。
[2015-10-29 22:28:47,732] [Timer-0] INFO - Thread[Timer-0,5,main]:10秒后再执行定时器三。。。
[2015-10-29 22:28:57,733] [Timer-0] INFO - Thread[Timer-0,5,main]:定时器一执行完毕。。。
[2015-10-29 22:28:57,733] [Timer-0] INFO - Thread[Timer-0,5,main]:10秒后再执行定时器三。。。
[2015-10-29 22:29:07,733] [Timer-0] INFO - Thread[Timer-0,5,main]:10秒后再执行定时器三。。。
[2015-10-29 22:29:17,734] [Timer-0] INFO - Thread[Timer-0,5,main]:10秒后再执行定时器三。。。
[2015-10-29 22:29:27,735] [Timer-0] INFO - Thread[Timer-0,5,main]:10秒后再执行定时器三。。。
[2015-10-29 22:29:37,736] [Timer-0] INFO - Thread[Timer-0,5,main]:10秒后再执行定时器三。。。
[2015-10-29 22:29:47,731] [Timer-0] INFO - Thread[Timer-0,5,main]:定时器二执行完毕。。。
[2015-10-29 22:29:47,736] [Timer-0] INFO - Thread[Timer-0,5,main]:10秒后再执行定时器三。。。
[2015-10-29 22:29:57,736] [Timer-0] INFO - Thread[Timer-0,5,main]:10秒后再执行定时器三。。。
[2015-10-29 22:30:07,737] [Timer-0] INFO - Thread[Timer-0,5,main]:10秒后再执行定时器三。。。
[2015-10-29 22:30:17,737] [Timer-0] INFO - Thread[Timer-0,5,main]:10秒后再执行定时器三。。。
[2015-10-29 22:30:27,738] [Timer-0] INFO - Thread[Timer-0,5,main]:10秒后再执行定时器三。。。
[2015-10-29 22:30:37,738] [Timer-0] INFO - Thread[Timer-0,5,main]:10秒后再执行定时器三。。。
[2015-10-29 22:30:47,739] [Timer-0] INFO - Thread[Timer-0,5,main]:10秒后再执行定时器三。。。
[2015-10-29 22:30:57,740] [Timer-0] INFO - Thread[Timer-0,5,main]:10秒后再执行定时器三。。。
[2015-10-29 22:31:07,740] [Timer-0] INFO - Thread[Timer-0,5,main]:10秒后再执行定时器三。。。
[2015-10-29 22:31:17,741] [Timer-0] INFO - Thread[Timer-0,5,main]:10秒后再执行定时器三。。。
[2015-10-29 22:31:27,741] [Timer-0] INFO - Thread[Timer-0,5,main]:10秒后再执行定时器三。。。
[2015-10-29 22:31:37,742] [Timer-0] INFO - Thread[Timer-0,5,main]:10秒后再执行定时器三。。。
[2015-10-29 22:31:47,746] [Timer-0] INFO - Thread[Timer-0,5,main]:10秒后再执行定时器三。。。
[2015-10-29 22:31:57,747] [Timer-0] INFO - Thread[Timer-0,5,main]:10秒后再执行定时器三。。。
[2015-10-29 22:32:07,748] [Timer-0] INFO - Thread[Timer-0,5,main]:10秒后再执行定时器三。。。

Others:

利用Timer和TimerTask可以实现定时完成某些任务。

但是在运行过程中出现了很奇怪的现象: 所有TimerTask都完成了,按理说程序应该自动退出,但是它却没有!

我以为是Eclipse的bug,然后再cmd下尝试,同样是无法退出。

这种现象在只要new了一个Timer(),就会出现。

奇怪,谷歌了一下,找不到答案,但是找到零星的提问同样的问题的帖子。 还是自己动手看看帮助文档吧。。。

在JDK1.5的文档Timer类中,有这样一句话: “对 Timer 对象最后的引用完成后,并且 所有未处理的任务都已执行完成后,计时器的任务执行线程会正常终止(并且成为垃圾回收的对象)。但是这可能要很长时间后才发生。”

但是这个“很长时间”是多长呢?一直等也没见它停止。。。 既然会成为垃圾回收的对象,那么我们就主动让系统回收一下吧。在每个TimerTask的run()方法最后加上一行代码: System.gc(); 然后再运行程序,搞定,正常了。
很自然会想到应该保证在Timer的最后一个TimerTask的最后调用gc(),但是经尝试发现只要在某一个TimerTask中调用过gc(),然后程序就能正常结束。
并且gc()也不必放在最后。

http://blog.csdn.net/liziyun537/article/details/6709572

java.util.Timer demo good的更多相关文章

  1. 使用java.util.Timer来周期性的执行制定的任务

    使用java.util.Timer来周期性的执行制定的任务 public class HandlerTest extends Activity { int[] images = new int[] { ...

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

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

  3. 任务调度--使用java.util.Timer实现

    任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务. 举个例子,比如说我们希望一个系统每周日晚上9点都将数据库文件备份一次,这时我们就可以使用任务调度来实现.为了更加的方便,我们需要 ...

  4. Java基础复习--java.util.Timer定时任务

    在java中,Timer类主要用于定时性.周期性任务 的触发,这个类中有两个方法比较难理解,那就是schedule和scheduleAtFixedRate方法,在这里就用实例分析一下. (1)sche ...

  5. java.util.Timer简介

    Timer是用于管理在后台执行的延迟任务或周期性任务,其中的任务使用java.util.TimerTask表示.任务的执行方式有两种: 按固定速率执行:即scheduleAtFixedRate的两个重 ...

  6. java.util.regx Demo

    import java.util.regex.Matcher;import java.util.regex.Pattern; public class TestRegex { public stati ...

  7. java.util.Timer分析源码了解原理

    Timer中最主要由三个部分组成: 任务 TimerTask .  任务队列: TaskQueue queue 和 任务调试者:TimerThread thread 他们之间的关系可以通过下面图示: ...

  8. java倒计时使用java.util.Timer实现,使用两个线程,以秒为单位

    public class Countdown3 { private int lin; private int curSec; public Countdown3(int lin)throws Inte ...

  9. java关于Timer schedule执行定时任务 !!!!!!!!!

    1.在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等.对于这样的操作最方便.高效的实现方式就是使用java.util.Timer工具类. private java.util.Time ...

随机推荐

  1. win7/win8通过媒体流(DLNA技术)共享音乐照片和视频

    http://www.jb51.net/os/windows/79421.html 工具/原料 Windows 7/8/10家庭高级版以上版本 家庭WiFi局域网(无须连接互联网) 支持DLNA的手机 ...

  2. Git相关操作汇总

    git clone: 正如上图,当我们打开终端的情况下,默认我们所在的目录是在/home/shiyanlou的,大家可以在终端输入以下命令把目录切换到桌面cd  /home/Desktop这个时候输入 ...

  3. WPF和Expression Blend开发实例:一个样式实现的数字输入框

    原文:WPF和Expression Blend开发实例:一个样式实现的数字输入框 今天来一个比较奇淫技巧的手法,很少人用,同时也不推荐太过频繁的使用. 先上样式: <Style x:Key=&q ...

  4. 冒泡排序----java实现

    冒泡排序思路:第1次:顺序比较从第0个到第len个(相邻两个)元素并把大的放后面,第一次进行完后,最大                                         的元素会在最后: ...

  5. C++ Primer 学习笔记_2_高速入口(继续)

     P15习题 //题1.14: 试分析假设v1 == v2的情况下,该程序的输出结果 #include <iostream> int main() { std::cout <&l ...

  6. Atitit. 拉开拉链zip文件 最佳实践实施 java c# .net php

    Atitit. 拉开拉链zip文件 的实现最佳实践 java c# .net php 1. Jdk zip 跟apache ant zip 1 2. Apache Ant包进行ZIP文件压缩,upzi ...

  7. 寒假了,想深入学习c++

    本来在图书馆借了好几本属,但是,自己没有经验,借的书都太深奥,看不懂,哎,桑心!

  8. [leetcode] Combination Sum and Combination SumII

    Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C wher ...

  9. 使用jQuery和css3实现了仿淘宝ued博客左边的菜单切换动画

    今天看到淘宝ued博客的左侧导航菜单的动画好,要使用jQuery和css3我做一个简单的示例,主要用途是实现jQuery 事件和css3 transition属性. 个元素来实现鼠标滑动到某个导航的背 ...

  10. bootstrap使用汇总

    //大多数功能都能够指定data属性来指定 但是,有必要的情况下使用jquery由于事件是不同的过程 //活动通常有两种状态show shown 通用和过去的 <!DOCTYPE html> ...