Java MessageFormat 类线程安全吗? (与 SimpleDateFormat 相反)
我知道 SimpleDateFormat 和 NumberFormat 不是线程安全的。
https://bugs.java.com/bugdatabase/view_bug?bug_id=4101500
但是其他 Format 类(例如 MessageFormat)又如何呢?
Fortify 360 将“MessageFormat.format(String, Object...)”静态方法的使用标记为“竞争条件 - 格式缺陷”问题,但是当我分析 MessageFormat 的源代码时,我在该方法中看到了这一点,它创建 MessageFormat 本身的一个新的本地实例。
Java MessageFormat 类线程安全吗?
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?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
javadoc
MessageFormat
说:所以正式地说,不 - 它不是线程安全的。
SimpleDateFormat
的文档也说了同样的事情。现在,文档可能只是保守,实际上它在多个线程中工作得很好,但不值得冒险。
The javadoc for
MessageFormat
says: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.
如果您引用该方法,那么
这是线程安全的,因为如 javadoc 中所述,它会创建一个新的 MessageFormat 来进行格式化。
顺便说一句,你的标题“SimpleThreadFormat”中有一个有趣的拼写错误:)
If you are referrring to the method
this is thread-safe since as described in the javadoc it creates a new MessageFormat to do the formatting.
BTW, thats a funny typo in your title 'SimpleThreadFormat' :)
根据 javadoc,
MessageFormat
对象不是线程安全的。您可以使用ThreadLocal
为每个需要的线程创建一个单独的对象。然后,您可以使用
threadLocalMessageFormat.get()
获取当前线程的MessageFormat
。Per the javadoc,
MessageFormat
objects are not thread-safe. You can use aThreadLocal
to create a separate object for each thread that needs one.You can then use
threadLocalMessageFormat.get()
to obtain aMessageFormat
for the current thread.