Будет ли каждый из двух потоков одновременно обращаться к одному и тому же экземпляру объекта Converter в JSF?
Зависит от того, как вы используете конвертер.Если вы используете
<h:inputWhatever>
<f:converter converterId="converterId" />
</h:inputWhatever>
, то для каждого входного элемента будет создан новый экземпляр, который является потокобезопасным (за исключением очень редкого случая, когда у конечного пользователя два идентичных представления на двух вкладках браузера водин и тот же сеанс и одновременно выполняет обратную передачу для обоих представлений).
Если вы, однако, используете
<h:inputWhatever converter="#{applicationBean.converter}" />
, то один и тот же экземпляр будет общим для всех представлений всего приложения, чтоне потокобезопасен.
Однако вы клонируете статический экземпляр DataFormat
при каждом создании конвертера.Эта часть уже не потокобезопасна.Вы можете рисковать клонированием экземпляра, когда его внутреннее состояние было изменено, поскольку оно использовалось где-то еще.Кроме того, клонирование существующего экземпляра не обязательно обходится дешевле, чем создание нового экземпляра.
Я бы порекомендовал просто объявить его threadlocal (т.е. внутри блока метода), независимо от того, как вы используете конвертер.Если дороговизна создания DateFormat
каждый раз является серьезной проблемой (вы ее профилировали?), То подумайте о замене на JodaTime .