linux系统时间对java.Timer执行产生的影响

很有意思的一件事情,如果你们有兴趣,可以去试试


环境:centOS7-mini-x64

openJDK-1.7


步骤:

1.创建一个简单的2秒输出时间的timer

package linuxTimer;

import org.apache.log4j.Logger;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

/**
 * Created by shenhongliang on 2015/11/23.
 */
public class Log {
    public static Logger logger = Logger.getLogger(Log.class);

    public static void main(String[] a){
        // System.out.println("This is println message.");

        // 记录debug级别的信息
//        logger.debug("This is debug message.");
        // 记录info级别的信息
//        logger.info("This is info message.");
        // 记录error级别的信息
//        logger.error("This is error message.");

        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                logger.info(new Date());
            }
        };
        Timer timer = new Timer();
        timer.schedule(task, 0, 2000);
    }
}

2.打个jar,让这个小程序在你的机器上跑起来,其实不用log4j也可以,开始我以为它不能在终端上显示呢

3.这个小程序隔2秒告诉你一次,当前系统的时间,现在用另外一个终端连接上linux

4.使用命令 ` date -s xx:xx:xx` 先向未来修改时间,观察结果,再向过去修改时间,观察结果。向过去修改时间的时候,不要修改的过大,1分钟内,因为你需要等它

我先把我的结论放上来:

经实验,并不是线程被停止,实际情况如下:
    1.当将时钟向未来调整,timer会继续从新时间开始定时执行任务.
    2.当将时钟向过去调整,timer会暂停执行,暂停的时间=现在的时间-新设置的时间
后续我会看一下到底为什么,再来填坑,先放出实验结果,感兴趣的自己动手试试,读了源码给我说说~

展开阅读全文

没有更多推荐了,返回首页