Java.text.SimpleDateFormat безопасен для потоков
Synchronization
Date formats are not synchronized. It is recommended to create separate format instances for each thread. If multiple threads access a format concurrently, it must be synchronized externally
Вышеупомянутая строка упоминается в классе JavaDoc класса SimpleDateFormat.
Означает ли это, что мы не должны создавать объекты SimpleDateFormat как Static.
И если мы создадим его как статичный, поэтому везде, где мы используем этот объект, нам нужно сохранить его в Synchronized Block.
Ответы
Ответ 1
Да SimpleDateFormat не является потокобезопасным, и рекомендуется также, когда вы обрабатываете дату, он должен получить доступ синхронно.
public Date convertStringToDate(String dateString) throws ParseException {
Date result;
synchronized(df) {
result = df.parse(dateString);
}
return result;
}
другой способ находится на http://code.google.com/p/safe-simple-date-format/downloads/list
Ответ 2
Это правда. Вы можете найти уже вопросы по этой проблеме в StackOverflow. Я использую для объявления как ThreadLocal
:
private static final ThreadLocal<DateFormat> THREAD_LOCAL_DATEFORMAT = new ThreadLocal<DateFormat>() {
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyyMMdd");
}
};
и в коде:
DateFormat df = THREAD_LOCAL_DATEFORMAT.get();
Ответ 3
Правильно. FastDateFormat от Apache Commons Lang - хорошая альтернатива потокобезопасности.
Начиная с версии 3.2 он поддерживает также синтаксический анализ до форматирования только 3.2.