zoukankan      html  css  js  c++  java
  • java.util.Timer demo good

    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

  • 相关阅读:
    飞控相关资料
    PID
    详解NXP Cortex-M3加密设置
    ucos ii 百度官方介绍
    两个静态页面之间值传递方式
    Wex5各组件介绍
    链接学习
    WeX5基础
    Oracle中用触发器实现自动记录表数据被修改的历史信息
    HTML DOM setInterval() 方法
  • 原文地址:https://www.cnblogs.com/softidea/p/4922018.html
Copyright © 2011-2022 走看看