CertificateFactory.getInstance( "x.509")がスレッドセーフであるかどうかを知ることができませんか?誰かが明確にしてもらえますか?事前にCertificateFactory.getInstance( "x.509")はスレッドセーフですか?
https://docs.oracle.com/javase/7/docs/api/java/security/cert/CertificateFactory.html
感謝。
CertificateFactory.getInstance( "x.509")がスレッドセーフであるかどうかを知ることができませんか?誰かが明確にしてもらえますか?事前にCertificateFactory.getInstance( "x.509")はスレッドセーフですか?
https://docs.oracle.com/javase/7/docs/api/java/security/cert/CertificateFactory.html
感謝。
この質問は古いですが、それはので、ここで、質問のためにヒット最初のGoogleの行く:あなたのコールの
結果は(OracleのJavaで)具体的には、sun.security.provider.X509Factory
CertificateFactory
実装です。そのファクトリは静的インスタンスメンバーしか持っていませんが、[私はそれらをチェックしました]はスレッドセーフです。また、多くの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);
}
}