我在一些笔记本电脑中观察到这种不寻常的行为。我在开发的应用程序中遇到了一些问题。在调试它时,我们发现新的Date.getTime()指向一个旧日期。之后我们尝试在这些机器上运行一个小程序。以下是我们使用的代码。
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));
}
}
输出类似于&#34; 946684800617&#34;如果有几个案例。当我们看到它指向2000年1月1日的日期和几毫秒。所有笔记本电脑都没有发生这种情况。
想知道为什么会这样,以便我们可以解决它。
PS:我们正在使用Windows 7(专业版),联想ThinkPad L420
答案 0 :(得分:1)
这不能回答你的问题,但你的代码太复杂了,可能会产生意想不到的后果。你可以尝试运行同样的东西吗?
public class Test {
public static void main(String... args) {
int length = 100000;
System.out.println(System.currentTimeMillis());
long[] times = new long[length];
for (int i = 0; i < length; i++) {
times[i] = System.currentTimeMillis();
if (times[i] < 1332334082344L)
System.out.println(times[i]);
}
System.out.println("Done " + times.length + " " + times[1000]);
}
}