To pytanie jest stary, ale jest to pierwszy google hit na pytanie, więc tu idzie:
Wynikiem rozmowy jest realizacja CertificateFactory
, a konkretnie (w Oracle Java) A sun.security.provider.X509Factory
. Ta fabryka ma tylko statyczne elementy instancji, które [sprawdziłem je] są chronione wątkami. Ma również kilka metod, które wskazują, że klasa została zbudowana z myślą o bezpieczeństwie wątków.
Powiedziałbym, że w praktyce, jeśli masz pewność, że używasz Oracle Java (tm), możesz założyć bezpieczeństwo wątków; należy jednak sprawdzić inne środowiska JRE, jeśli ich używasz. zawsze można po prostu być bezpieczne i zawinąć w ThreadLocal
wartość, np:
private static final ThreadLocal<CertificateFactory> certFactory =
ThreadLocal.withInitial(() -> {
try {
return CertificateFactory.getInstance("x.509");
} catch (Exception e) {
throw new RuntimeException(e);
}
});
a potem
public Certificate loadCertFrom(String filename) throws IOException, CertificateException {
try (final FileInputStream in = new FileInputStream(filename)) {
return certFactory.get().generateCertificate(in);
}
}