Является ли класс Java MessageFormat потокобезопасным?(в отличие от SimpleDateFormat)

StackOverflow https://stackoverflow.com/questions/3257068

Вопрос

Я знаю, что SimpleDateFormat и NumberFormat не являются потокобезопасными.
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4101500

Но как насчет других классов формата, таких как MessageFormat?

Fortify 360 помечает использование статического метода "MessageFormat.format(String, Object...)" как проблему "Условия гонки - ошибка формата", но когда я проанализировал исходный код MessageFormat, я увидел, что в этом методе он создает новый локальный экземпляр самого MessageFormat.

Является ли класс Java MessageFormat потокобезопасным?

Это было полезно?

Решение

javadoc Для MessageFormat говорит:

Форматы сообщений

не синхронизируются. Рекомендуется создавать отдельные Формат экземпляров для каждого потока.Если Несколько потоков доступа к формату одновременно это должно быть синхронизировано снаружи.

Официально, нет - это не безрезультатно.

Документы для SimpleDateFormat говорят о том же.

Теперь документы могут быть консервативными, а на практике он будет работать просто в нескольких потоках, но это не стоит риска.

Другие советы

Если вы обратитесь к методу

public static String format(String pattern, Object... arguments)
.

Это резьба, поскольку, как описано в Javadoc, это создает новый MessageFormat, чтобы сделать форматирование.

BTW, это забавная опечатка в вашем названии «SimpleThreadFormat» :)

Согласно javadoc, MessageFormat объекты не являются потокобезопасными.Вы можете использовать ThreadLocal чтобы создать отдельный объект для каждого потока, которому он нужен.

ThreadLocal<MessageFormat> threadLocalMessageFormat =
    new ThreadLocal<MessageFormat>() {
        @Override
        protected MessageFormat initialValue() {
            return new MessageFormat(pattern);
        }
    };

Затем вы можете использовать threadLocalMessageFormat.get() чтобы получить MessageFormat для текущего потока.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top