首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java ConcurrentHashMap.keySet()挂起

Java ConcurrentHashMap.keySet()挂起
EN

Stack Overflow用户
提问于 2015-12-04 23:42:56
回答 3查看 302关注 0票数 1

我在Linux机器上观察到一个奇怪的行为。代码在Win7上运行得很好。有问题的代码挂在xmlToJavaMap.keySet()上。这两个日志语句均未记录!在堆转储中未发现死锁。

代码语言:javascript
复制
    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

EN

回答 3

Stack Overflow用户

发布于 2015-12-05 00:03:11

使用jps -v监视您的java进程。然后使用jstack监视您的线程堆栈。这可以帮助你找到解决方案。

票数 1
EN

Stack Overflow用户

发布于 2015-12-11 22:55:46

这是实际发生的事情:)由于NoSuchMethod,xmlToJavaMap.keySet()实际上失败了,线程正在终止。错误堆栈跟踪被记录在另一个日志文件中,这导致了混淆。一旦错误得到解决,一切都会恢复正常。

票数 0
EN

Stack Overflow用户

发布于 2019-08-06 12:05:36

我发现了同样的情况,挂在keySet()方法上。实际上,线程是通过NoSuchMethodError错误退出的。解决方案是只声明

代码语言:javascript
复制
ConcurrentHashMap<String,String> xmlToJavaMap = ApplicationContext.getBean("map");

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34092030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档