我在几台笔记本电脑中观察到这种不寻常的行为。 我在开发的应用程序中运行了一些问题。 在debugging它时,我们发现新的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”。 当我们看到它的date指向2000年1月1日和几毫秒。 这在所有的笔记本电脑中都没有发生。
想知道为什么会发生这种情况,以便我们可以解决这个问题。
PS:我们正在使用Windows 7(专业版),联想ThinkPad L420
在Windows上从C中检测32/64位Java
Java Awt Robot改变Windows鼠标速度
如何通过Apache的HttpClient在Couchdb中设置pipe理员(给出一个curl的例子)
Java – 支持traceroute的API?
如何在Java项目中重命名1000个类名(Eclipse或其他)?
在Windows 10上运行时出现Blazegraph错误
设置在linux上运行的Java程序的好价值
如果在Ubuntu上安装了多个Java版本,如何检查Oracle Java版本
Debian上的Java本地内存泄漏
这不会回答你的问题,但你的代码是如此复杂,可能会有意想不到的后果。 你可以尝试运行这个做同样的事情吗?
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]); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。