Java MessageFormat类线程是否安全?(与SimpleDateFormat相对)

the*_*ker 8 java thread-safety messageformat

我知道SimpleDateFormat和NumberFormat不是线程安全的.
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4101500

但是像MessageFormat这样的其他Format类呢?

Fortify 360将"MessageFormat.format(String,Object ...)"静态方法的使用标记为"Race Condition - Format Flaw"问题,但是当我分析MessageFormat的源代码时,我在那个方法中看到了,它创建一个MessageFormat本身的新本地实例.

Java MessageFormat类线程是否安全?

ska*_*man 10

javadoc中MessageFormat说道:

消息格式不同步.建议为每个线程创建单独的格式实例.如果多个线程同时访问格式,则必须在外部进行同步.

正式,不 - 它不是线程安全的.

文档SimpleDateFormat说的大致相同.

现在,文档可能只是保守,在实践中它可以在多个线程中正常工作,但它不值得冒风险.


Jör*_*ann 7

如果您参考该方法

public static String format(String pattern, Object... arguments)
Run Code Online (Sandbox Code Playgroud)

这是线程安全的,因为在javadoc中描述它创建一个新的MessageFormat来进行格式化.

顺便说一句,这就是你的标题'SimpleThreadFormat'中有趣的错字:)