Java ConcurrentHashMap.keySet() зависает

Я наблюдаю странное поведение на коробке 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(TM) SE Runtime Environment (сборка 1.7.0_11-b21) 64-разрядная серверная виртуальная машина Java HotSpot (TM) (сборка 23.6-b04, смешанный режим) Red Hat 4.4.7

2 ответа

Используйте 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.

основная причина в том, что "Неопределенная ссылка: .. ConcurrentHashMap.keySet()" при сборке в Java 8, вызвана : в версиях 7 и 8,keySet()метод - это не тот же возврат, эта ошибка может быть не в журнале или консоли вашего проекта, а в куче. вы можете сбросить кучу, чтобы найтиjava.lang.NoSuchMethodError относится к keySet()

Другие вопросы по тегам