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()