thi*_*lad 7 java certificate thread-safety x509
我无法确定CertificateFactory.getInstance("x.509")是否是线程安全的?有人可以澄清一下吗?
https://docs.oracle.com/javase/7/docs/api/java/security/cert/CertificateFactory.html
提前致谢.
这个问题很旧,但这是这个问题的第一个谷歌搜索,所以这里是:
调用的结果是一个CertificateFactory实现,特别是(在 Oracle Java 中)一个sun.security.provider.X509Factory. 该工厂只有静态实例成员,[我检查了它们]是线程安全的。它还具有许多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);
}
});
Run Code Online (Sandbox Code Playgroud)
然后后来
public Certificate loadCertFrom(String filename) throws IOException, CertificateException {
try (final FileInputStream in = new FileInputStream(filename)) {
return certFactory.get().generateCertificate(in);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1023 次 |
| 最近记录: |