Я использую много SimpleDateFormat-объектов в моем сервлете.К сожалению, SimpleDateFormat не является потокобезопасным.Таким образом, я подумал о том, чтобы обернуть его с помощью ThreadLocal, чтобы способствовать повторному использованию SimpleDateFormat-объектов.Я написал класс утилит, чтобы включить это:
public class DateUtil {
private final static ThreadLocal<SimpleDateFormat> dateFormat = new ThreadLocal<SimpleDateFormat>() {
return new SimpleDateFormat();
}
public static SimpleDateFormat get () {
return dateFormat.get();
}
}
На самом деле, это, кажется, приводит к утечке памяти.При закрытии моего веб-приложения Tomcat регистрирует следующее сообщение об ошибке:
SEVERE: веб-приложение [] создало ThreadLocal с ключом типа [null] (значение [com.example.util.DateUtil $ 2@ 50242f7d]) и значение типа [java.text.SimpleDateFormat] (значение [java.text.SimpleDateFormat@d91b489b]), но не удалось удалить его при остановке веб-приложения.С большой вероятностью это может привести к утечке памяти.
Я понимаю причину утечки памяти, но каков наилучший способ обработки объектов SimpleDateFormat (или любых других не поточно-ориентированных объектов)?) внутри сервлетов?