簡體   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