繁体   English   中英

Java ConcurrentHashMap.keySet()挂起

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM