سؤال

هو المعيار جافا 1.6 javax.xml.موزعي.DocumentBuilder الطبقة موضوع آمنة ؟ هل هو آمن استدعاء تحليل() طريقة من عدة خيوط بالتوازي ؟

جافادوك لا يذكر هذه المسألة ، ولكن جافادوك على نفس الدرجة في جافا 1.4 تحديدا يقول أنه لا من المفترض أن تكون متزامنة;لذلك أفترض أن في 1.6 هو ؟

والسبب هو أن لدي عدة ملايين من المهام قيد التشغيل في ExecutorService ، ويبدو مكلفة للاتصال DocumentBuilderFactory.newDocumentBuilder() في كل مرة.

هل كانت مفيدة؟

المحلول

على الرغم من DocumentBuilder.تحليل لا يبدو أن يتحور باني لا على الشمس JDK الافتراضي التنفيذ (على أساس أباتشي Xerces).غريب الأطوار تصميم المقرر.ماذا يمكنك أن تفعل ؟ أعتقد أن استخدام ThreadLocal:

private static final ThreadLocal<DocumentBuilder> builderLocal =
    new ThreadLocal<DocumentBuilder>() {
        @Override protected DocumentBuilder initialValue() {
            try {
                return
                    DocumentBuilderFactory
                        .newInstance(
                            "xx.MyDocumentBuilderFactory",
                            getClass().getClassLoader()
                        ).newDocumentBuilder();
            } catch (ParserConfigurationException exc) {
                throw new IllegalArgumentException(exc);
            }
        }
    };

(تنويه:وليس ذلك بكثير كما حاول ترجمة التعليمات البرمجية.)

نصائح أخرى

هناك إعادة تعيين (طريقة) على DocumentBuilder الذي يعيد إلى الدولة عندما أنشئت لأول مرة.إذا كنت تسير ThreadLocal الطريق, لا تنسى أن تتصل هذه أو أنت مسقي.

يمكنك أيضا التحقق من هذا الرمز إلى بذل مزيد من التحسين https://svn.apache.org/repos/asf/shindig/trunk/java/common/src/main/java/org/apache/shindig/common/xml/XmlUtil.java

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