我在Linux机器上观察到一个奇怪的行为。代码在Win7上运行得很好。有问题的代码挂在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运行时环境(内部版本1.7.0_11-b21) Java HotSpot(TM) 64位服务器虚拟机(内部版本23.6-b04,混合模式)RedHat4.4.7
发布于 2015-12-05 00:03:11
使用jps -v监视您的java进程。然后使用jstack监视您的线程堆栈。这可以帮助你找到解决方案。
发布于 2015-12-11 22:55:46
这是实际发生的事情:)由于NoSuchMethod,xmlToJavaMap.keySet()实际上失败了,线程正在终止。错误堆栈跟踪被记录在另一个日志文件中,这导致了混淆。一旦错误得到解决,一切都会恢复正常。
发布于 2019-08-06 12:05:36
我发现了同样的情况,挂在keySet()方法上。实际上,线程是通过NoSuchMethodError错误退出的。解决方案是只声明
ConcurrentHashMap<String,String> xmlToJavaMap = ApplicationContext.getBean("map");到
Map<String,String> xmlToJavaMap = ApplicationContext.getBean("map");或
确保代码和依赖jar是由相同的jdk版本编译的。
根本原因是"Undefined reference: .. ConcurrentHashMap.keySet()" when building in Java 8,由以下原因引起:在版本7和版本8中,keySet()方法不是相同的返回,这个错误可能不在项目的日志或控制台中,而是在堆中。您可以转储堆来查找与keySet()相关的java.lang.NoSuchMethodError
https://stackoverflow.com/questions/34092030
复制相似问题