![](/img/trans.png)
[英]“Undefined reference: .. ConcurrentHashMap.keySet()” when building in Java 8
[英]Java ConcurrentHashMap.keySet() hangs
我在Linux机器上观察到奇怪的行为。 该代码在Win 7上运行良好。有问题的代码挂在xmlToJavaMap.keySet()上。 两个日志语句均未记录!!! 在堆转储中找不到死锁。
ConcurrentHashMap<String,String> xmlToJavaMap = ApplicationContext.getBean("map");
logger.info("before for loop");
for (String key : xmlToJavaMap.keySet()) {
logger.info("key: " + key);
...
}
logger.info("map processed.");
平台:Java版本“ 1.7.0_11” Java™SE运行时环境(内部版本1.7.0_11-b21)Java HotSpot(TM)64位服务器VM(内部版本23.6-b04,混合模式)Red Hat 4.4.7
使用jps -v监视您的Java进程。 然后使用jstack观察线程堆栈。 那可以帮助您找到解决方案。
这是实际发生的事情:) xmlToJavaMap.keySet()
实际上由于NoSuchMethod失败,线程正在终止。 错误堆栈跟踪记录在另一个引起混乱的日志文件中。 解决错误后,一切恢复正常。
我发现相同的情况,挂在keySet()
方法上。 实际上,该线程由于NoSuchMethodError错误而退出。 解决方案是只声明
ConcurrentHashMap<String,String> xmlToJavaMap = ApplicationContext.getBean("map");
至
Map<String,String> xmlToJavaMap = ApplicationContext.getBean("map");
要么
确保代码和依赖项jar由相同的jdk版本编译。
根本原因是在Java 8中进行构建时 , “未定义引用:.. ConcurrentHashMap.keySet()”的原因是:在版本7和8中, keySet()
方法返回的结果不同,此错误可能不在您的项目中日志或控制台,但在堆中。 您可以转储堆以查找与keySet()
相关的java.lang.NoSuchMethodError
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.