هو جافا مساجيفورمات فئة الموضوع آمنة?(على عكس سيمبلداتيفورمات)

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

سؤال

وأنا أعلم أن سيمبليداتيفورمات و نومبرفورمات ليست موضوع آمنة.
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 للخيط الحالي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top