【发布时间】:2012-04-03 07:20:05
【问题描述】:
我在一些笔记本电脑中观察到了这种不寻常的行为。我在我们开发的应用程序中运行时遇到了一些问题。在调试它时,我们发现 new Date.getTime() 指向一个旧的 date 。之后我们尝试在这些机器上运行一个小程序。以下是我们使用的代码。
import java.util.Date;
import java.util.concurrent.ConcurrentHashMap;
public class Test {
public static void main(String... args) {
System.out.println(new Date().getTime());
ConcurrentHashMap chm = new ConcurrentHashMap();
for (int i = 0; i < 100000; i++) {
chm.put(i, new Date().getTime());
if (Long.parseLong(String.valueOf(chm.get(i))) < 1332334082344l) {
System.out
.println(Long.parseLong(String.valueOf(chm.get(i))));
}
}
System.out.println("dONE "+chm.size()+" "+chm.get(1000));
}
}
在少数情况下,输出类似于“946684800617”。当我们看到它指向 2000 年 1 月 1 日和几毫秒的日期时。并非所有笔记本电脑都发生这种情况。
想知道为什么会发生这种情况,以便我们可以解决它。
PS : 我们使用的是 windows 7 (pro),联想 ThinkPad L420
【问题讨论】:
-
您使用的是什么版本的 Java?出现问题的笔记本电脑的版本是否与其他系统不同?
-
他们使用 java 1.6.0.22 .. 他们都使用相同的 java
-
笔记本电脑的系统时间是多少?
-
疯狂猜测:可能是其他一些软件(例如时间同步工具,或其他影响时间的东西)正在将时间重置为“出厂设置”一小会儿,而 Java 恰好赶上那一刻有时并报告无效日期?我将从使用其他语言运行相同的测试开始,最好的主意是 C++。
-
@Max:会尝试这样做并发布..但我不认为是因为它发生在一天中的任何时间并且同步工具在特定时间..据我所知我知道除了 windows 7、.net 框架、java 和 tom cat 之外,这些系统中没有安装任何东西。就是这样