![](/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.