2017-05-05 3 views

答えて

0

この質問は古いですが、それはので、ここで、質問のためにヒット最初のGoogleの行く:あなたのコールの

結果は(OracleのJavaで)具体的には、sun.security.provider.X509FactoryCertificateFactory実装です。そのファクトリは静的インスタンスメンバーしか持っていませんが、[私はそれらをチェックしました]はスレッドセーフです。また、多くのsynchronized staticメソッドがあります。これは、クラスがスレッドの安全性を考慮して構築されたことを示しています。

実際には、Oracle Java(tm)を使用していることが確実であれば、スレッドの安全性を前提とすることができます。ただし、使用している場合は、他のJREをチェックする必要があります。あなたはいつも念と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); 
    } 
} 
関連する問題