javathread-safetymessageformat

Is the Java MessageFormat Class thread safe? (as opposed to SimpleDateFormat)


I know that SimpleDateFormat and NumberFormat are NOT thread safe.
https://bugs.java.com/bugdatabase/view_bug?bug_id=4101500

But what about the other Format classes like MessageFormat?

Fortify 360 is flagging the use of "MessageFormat.format(String, Object...)" static method as a "Race Condition - Format Flaw" issue, but when I analyze the the source code of MessageFormat, I saw that in that method, it creates a new local instance of MessageFormat itself.

Is the Java MessageFormat Class thread safe?


Solution

  • The javadoc for MessageFormat says:

    Message 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.

    So officially, no - it's not thread-safe.

    The docs for SimpleDateFormat say much the same thing.

    Now, the docs may just be being conservative, and in practice it'll work just fine in multiple threads, but it's not worth the risk.