هو جافا مساجيفورمات فئة الموضوع آمنة?(على عكس سيمبلداتيفورمات)
-
16-09-2020 - |
سؤال
وأنا أعلم أن سيمبليداتيفورمات و نومبرفورمات ليست موضوع آمنة.
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4101500
ولكن ماذا عن فئات التنسيق الأخرى مثل مساجيفورمات?
تحصين 360 هو وضع علامة على استخدام " مساجيفورمات.تنسيق (سلسلة ، كائن...) "طريقة ثابتة باعتبارها" حالة سباق - شكل عيب " القضية ، ولكن عندما أقوم بتحليل شفرة المصدر من مساجيفورمات ، رأيت أنه في هذه الطريقة ، فإنه يخلق مثيل محلي جديد من مساجيفورمات نفسها.
هو جافا مساجيفورمات فئة الموضوع آمنة?
المحلول
ال جافادوك ل MessageFormat
يقول:
لا تتم مزامنة تنسيقات الرسائل.فمن المستحسن لخلق منفصلة مثيلات التنسيق لكل مؤشر ترابط.إذا مؤشرات ترابط متعددة الوصول إلى تنسيق في نفس الوقت ، يجب أن تكون متزامنة خارجيا.
لذلك رسميا ، لا-انها ليست موضوع آمنة.
المستندات ل SimpleDateFormat
قل نفس الشيء.
الآن ، المستندات أيار / مايو مجرد أن تكون متحفظا ، وفي الممارسة العملية سوف تعمل على ما يرام في مواضيع متعددة ، لكنه لا يستحق المخاطرة.
نصائح أخرى
إذا كنت تحيل إلى الطريقة
giveacodicetagpre.هذا هو آمنا مؤشر الترابط منذ ما هو موضح في JavaDoc، يقوم بإنشاء MOSILENTIONFORMAT جديد للقيام بالتنسيق.
btw، وهذا خطأ مطبعي مضحك في عنوانك "Simpletheadformat" :)
لكل جافادوك, MessageFormat
الكائنات ليست آمنة للخيط.يمكنك استخدام ThreadLocal
لإنشاء كائن منفصل لكل مؤشر ترابط يحتاج إلى واحد.
ThreadLocal<MessageFormat> threadLocalMessageFormat =
new ThreadLocal<MessageFormat>() {
@Override
protected MessageFormat initialValue() {
return new MessageFormat(pattern);
}
};
يمكنك بعد ذلك استخدام threadLocalMessageFormat.get()
للحصول على MessageFormat
للخيط الحالي.