2017-05-05 10 views
5

मैं यह पता लगाने में सक्षम नहीं हूं कि प्रमाणपत्रFactory.getInstance ("x.509") धागा सुरक्षित है या नहीं? क्या कोई स्पष्टीकरण दे सकता है?क्या प्रमाणपत्रFactory.getInstance ("x.509") थ्रेड सुरक्षित है?

https://docs.oracle.com/javase/7/docs/api/java/security/cert/CertificateFactory.html

अग्रिम धन्यवाद।

उत्तर

0

यह सवाल पुराना है, लेकिन यह पहली बार गूगल प्रश्न के लिए मारा है, तो यहाँ जाता है:

अपने कॉल का परिणाम विशेष रूप से (Oracle जावा में) एक CertificateFactory कार्यान्वयन, एक sun.security.provider.X509Factory। उस कारखाने में केवल स्थिर उदाहरण सदस्य हैं जो [मैंने चेक किया है] थ्रेडसेफ हैं। इसमें synchronized static विधियां भी हैं, जो इंगित करती हैं कि कक्षा को थ्रेड सुरक्षा के साथ दिमाग में बनाया गया था।

तो मैं कहूंगा कि अभ्यास में, यदि आपको आश्वासन दिया जाता है कि आप ओरेकल जावा (टीएम) का उपयोग कर रहे हैं तो आप थ्रेड सुरक्षा मान सकते हैं; हालांकि, यदि आप उनका उपयोग कर रहे हैं तो आपको अन्य जेआरई जांचना होगा। तुम हमेशा बस सुरक्षित रहें और ThreadLocal में मूल्य लपेट सकता है, उदाहरण के लिए:

private static final ThreadLocal<CertificateFactory> certFactory = 
    ThreadLocal.withInitial(() -> { 
    try { 
     return CertificateFactory.getInstance("x.509"); 
    } catch (Exception e) { 
     throw new RuntimeException(e); 
    } 
}); 

और फिर बाद में

public Certificate loadCertFrom(String filename) throws IOException, CertificateException { 
    try (final FileInputStream in = new FileInputStream(filename)) { 
     return certFactory.get().generateCertificate(in); 
    } 
} 
संबंधित मुद्दे