很有意思的一件事情,如果你们有兴趣,可以去试试
环境: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会暂停执行,暂停的时间=现在的时间-新设置的时间
后续我会看一下到底为什么,再来填坑,先放出实验结果,感兴趣的自己动手试试,读了源码给我说说~